--- /dev/null
+SUBDIRS = src
+
--- /dev/null
+#! /bin/sh
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+(
+ cd "$srcdir" &&
+ autoreconf --force -v --install
+) || exit
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
--- /dev/null
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.68])
+AC_CONFIG_SRCDIR([src/soundsample_pulse_async_test.cpp])
+AC_INIT([ico-uxf-HomeScreen-sample-app], [0.0.1], [https://BUG-REPORT-ADDRESS])
+AM_INIT_AUTOMAKE([1.11.1 -Wall -Werror foreign silent-rules])
+AC_CONFIG_SRCDIR([src/soundsample_yswavfile.cpp])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_INSTALL
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([stddef.h stdlib.h string.h unistd.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_TYPE_UINT8_T
+
+# Checks for library functions.
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_CHECK_FUNCS([gettimeofday memset sqrt strcasecmp strncasecmp strtol tzset])
+AC_CONFIG_FILES([Makefile
+ src/Makefile])
+AC_OUTPUT
--- /dev/null
+#!/bin/sh
+edje_cc -id ../res/images/ -fd ../res/images/ samplenavi_conf.edc
+edje_cc -id ../res/images/ -fd ../res/images/ samplenavi_conf_dist.edc
+chmod 755 samplenavi_conf.edj
+chmod 755 samplenavi_conf_dist.edj
--- /dev/null
+images{
+ image:"nai_01_off.png" COMP;
+ image:"nai_01_on.png" COMP;
+ image:"nai_02_off.png" COMP;
+ image:"nai_03_off.png" COMP;
+ image:"nai_04_off.png" COMP;
+ image:"na_pa_01.png" COMP;
+ image:"na_pa_02.png" COMP;
+}
+
+collections {
+ group {
+ name: "samplenavi_conf";
+ parts {
+ part {
+ name: "background";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "transparency";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 0;
+ rel1 {
+ relative: 0.0 0.5;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "ui_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 0 34 119 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 415;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "nai_01";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 34 128;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 193 287;
+ }
+ image{
+ normal: "nai_01_off.png";
+ }
+ }
+ description {
+ state: "nai_01_on" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 34 128;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 193 287;
+ }
+ image{
+ normal: "nai_01_on.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_02";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 214 128;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 373 287;
+ }
+ image{
+ normal: "nai_02_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_03";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 394 128;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 553 287;
+ }
+ image{
+ normal: "nai_03_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_04";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 574 128;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 733 287;
+ }
+ image{
+ normal: "nai_04_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "na_pa_01";
+ type: IMAGE;
+ mouse_events: 1;
+ //access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 20 439;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 29 459;
+ }
+ image{
+ normal: "na_pa_01.png";
+ }
+ }
+ }
+
+ part {
+ name: "na_pa_02";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 38 437;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 87 459;
+ }
+ image{
+ normal: "na_pa_02.png";
+ }
+ }
+ }
+ }
+ }
+}
+
--- /dev/null
+images{
+ image:"nai_05_off.png" COMP;
+ image:"nai_06_off.png" COMP;
+ image:"nai_07_off.png" COMP;
+ image:"nai_08_off.png" COMP;
+ image:"nai_09_off.png" COMP;
+ image:"nai_10_off.png" COMP;
+ image:"nai_11_off.png" COMP;
+ image:"nai_12_off.png" COMP;
+ image:"nai_12_on.png" COMP;
+ image:"na_pa_01.png" COMP;
+ image:"na_pa_03.png" COMP;
+ image:"na_pa_04.png" COMP;
+}
+
+collections {
+ group {
+ name: "samplenavi_dist";
+ parts {
+ part {
+ name: "background";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "transparency";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 0;
+ rel1 {
+ relative: 0.0 0.5;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "ui_bg";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 0 34 119 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 415;
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ offset: -1 -1;
+ }
+ }
+ }
+
+ part {
+ name: "nai_05";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 34 38;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 193 197;
+ }
+ image{
+ normal: "nai_05_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_06";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 214 38;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 373 197;
+ }
+ image{
+ normal: "nai_06_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_07";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 394 38;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 553 197;
+ }
+ image{
+ normal: "nai_07_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_08";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 574 38;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 733 197;
+ }
+ image{
+ normal: "nai_08_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_09";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 34 218;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 193 377;
+ }
+ image{
+ normal: "nai_09_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_10";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 214 218;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 373 377;
+ }
+ image{
+ normal: "nai_10_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_11";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 394 218;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 553 377;
+ }
+ image{
+ normal: "nai_11_off.png";
+ }
+ }
+ }
+
+ part {
+ name: "nai_12";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 574 218;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 733 377;
+ }
+ image{
+ normal: "nai_12_off.png";
+ }
+ }
+ description {
+ state: "nai_12_on" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 574 218;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 733 377;
+ }
+ image{
+ normal: "nai_12_on.png";
+ }
+ }
+ }
+
+ part {
+ name: "na_pa_03";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 38 437;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 87 459;
+ }
+ image{
+ normal: "na_pa_03.png";
+ }
+ }
+ }
+
+ part {
+ name: "na_pa_01";
+ type: IMAGE;
+ mouse_events: 1;
+ //access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 100 439;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 109 459;
+ }
+ image{
+ normal: "na_pa_01.png";
+ }
+ }
+ }
+
+ part {
+ name: "na_pa_04";
+ type: IMAGE;
+ mouse_events: 1;
+ access: 1;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 121 437;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 190 459;
+ }
+ image{
+ normal: "na_pa_04.png";
+ }
+ }
+ }
+
+ }
+ }
+}
--- /dev/null
+Name=ico-app-samplenavi
+Type=Application
+Exec=/opt/apps/org.tizen.ico.app-samplenavi/bin/ico-app-samplenavi -basescreen
+Icon=org.tizen.ico.app-samplenavi.png
+Nodisplay=True
+Version=0.1.0
+Categories=Map;dispzone=Full;
+#Categories=Map;dispzone=UpperLeft;
+Comment=sample navigation app
--- /dev/null
+Name=ico-app-soundsample
+Type=Application
+Exec=/opt/apps/org.tizen.ico.app-soundsample/bin/ico-app-soundsample
+Icon=org.tizen.ico.app-soundsample.png
+Nodisplay=True
+Version=0.1.0
+Comment=audio test app
+Categories=Entertainment;Maker;run=Center;dispzone=Full;soundzone=Full;noauto
--- /dev/null
+Name=ico-app-vicsample
+Type=Application
+Exec=/opt/apps/org.tizen.ico.app-vicsample/bin/ico-app-vicsample
+Icon=org.tizen.ico.app-vicsample.png
+Nodisplay=True
+Version=0.1.0
+Comment=vic info display test app
+#Categories=Entertainment;maker;run=Center;dispzone=Full
+Categories=Entertainment;maker;run=Center
--- /dev/null
+* Fri Apr 26 2013 Shibata Makoto <shibata@mac.tec.toyota.co.jp> c744832
+- Import initial.
+
--- /dev/null
+Name: ico-uxf-HomeScreen-sample-app
+Summary: HomeScreen sample application
+Version: 0.0.4
+Release: 1
+Group: System/GUI
+License: Apache License, Version 2.0
+URL: http://www.toyota.com
+Source0: %{name}-%{version}.tar.bz2
+
+#ico-app-soundsample
+BuildRequires: pkgconfig(wayland-client) >= 1.0
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ecore-wayland)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(aul)
+BuildRequires: pkgconfig(bundle)
+BuildRequires: pkgconfig(ail)
+BuildRequires: libwebsockets-devel
+BuildRequires: pulseaudio-libs-devel
+BuildRequires: ico-uxf-weston-plugin-devel
+BuildRequires: ico-uxf-HomeScreen-devel
+Requires: weston >= 1.0
+Requires: ico-uxf-weston-plugin
+Requires: ico-uxf-HomeScreen
+Requires: ecore
+Requires: elementary
+Requires: evas
+Requires: glib2
+Requires: pulseaudio-libs
+
+#ico-app-vicsample
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ecore-wayland)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(aul)
+BuildRequires: libwebsockets-devel
+BuildRequires: ico-uxf-weston-plugin-devel
+BuildRequires: ico-uxf-HomeScreen-devel
+Requires: ico-uxf-weston-plugin
+Requires: ico-uxf-HomeScreen
+Requires: ecore
+Requires: elementary
+Requires: evas
+Requires: dbus
+Requires: dbus-glib
+Requires: automotive-message-broker
+
+#ico-app-samplenavi
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(ecore-evas)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ewebkit2)
+BuildRequires: pkgconfig(wayland-client)
+BuildRequires: pkgconfig(wayland-cursor)
+BuildRequires: pkgconfig(wayland-egl)
+BuildRequires: pkgconfig(wayland-server)
+BuildRequires: pkgconfig(ecore-wayland)
+BuildRequires: pkgconfig(glesv2)
+BuildRequires: pkgconfig(egl)
+BuildRequires: pkgconfig(cairo)
+BuildRequires: pkgconfig(pango)
+BuildRequires: pkgconfig(pangocairo)
+BuildRequires: pkgconfig(gdk-pixbuf-2.0)
+BuildRequires: pkgconfig(gobject-2.0)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(gmodule-2.0)
+BuildRequires: pkgconfig(gthread-2.0)
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(aul)
+BuildRequires: libwebsockets-devel
+BuildRequires: ico-uxf-weston-plugin-devel
+BuildRequires: ico-uxf-HomeScreen-devel
+BuildRequires: edje-tools
+#BuildRequires: pkgconfig(opencv)
+Requires: ico-uxf-weston-plugin
+Requires: ico-uxf-HomeScreen
+Requires: ecore
+Requires: evas
+Requires: ecore-evas
+Requires: eina
+Requires: elementary
+Requires: webkit2-efl
+Requires: wayland
+Requires: mesa-libwayland-egl
+Requires: ecore-wayland
+Requires: mesa-libGLESv2
+Requires: mesa-libEGL
+Requires: cairo
+Requires: pango
+Requires: gdk-pixbuf
+Requires: glib2
+Requires: json-glib
+Requires: aul
+Requires: dbus
+Requires: dbus-glib
+Requires: automotive-message-broker
+#Requires: libopencv2_4
+
+%description
+HomeScreen sample application
+
+%prep
+%setup -q -n %{name}-%{version}
+
+%build
+autoreconf --install
+
+%configure
+make %{?_smp_mflags}
+cd data/;sh make.sh;cd ../
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+# configurations(ico-app-soundsample)
+%define sound_PREFIX /opt/apps/org.tizen.ico.app-soundsample
+
+mkdir -p %{buildroot}%{sound_PREFIX}/bin/
+mkdir -p %{buildroot}%{sound_PREFIX}/sounds/
+mkdir -p %{buildroot}%{sound_PREFIX}/res/icons/default/small/
+mkdir -p %{buildroot}/opt/share/applications/
+install -m 0644 soundsample_config.txt %{buildroot}%{sound_PREFIX}/res/
+install -m 0644 org.tizen.ico.app-soundsample.png %{buildroot}%{sound_PREFIX}/res/icons/default/small/
+install -m 0644 musicbox.wav %{buildroot}%{sound_PREFIX}/sounds/
+install -m 0644 org.tizen.ico.app-soundsample.desktop %{buildroot}/opt/share/applications/
+
+# configurations(ico-app-vicsample)
+%define vic_PREFIX /opt/apps/org.tizen.ico.app-vicsample
+
+mkdir -p %{buildroot}%{vic_PREFIX}/bin/
+mkdir -p %{buildroot}%{vic_PREFIX}/res/icons/default/small/
+mkdir -p %{buildroot}/opt/share/applications/
+install -m 0644 vicsample_config.txt %{buildroot}%{vic_PREFIX}/res/
+install -m 0644 org.tizen.ico.app-vicsample.png %{buildroot}%{vic_PREFIX}/res/icons/default/small/
+install -m 0644 org.tizen.ico.app-vicsample.desktop %{buildroot}/opt/share/applications/
+
+# configurations(ico-app-samplenavi)
+%define navi_PREFIX /opt/apps/org.tizen.ico.app-samplenavi
+
+mkdir -p %{buildroot}%{navi_PREFIX}/bin/
+mkdir -p %{buildroot}%{navi_PREFIX}/data/
+mkdir -p %{buildroot}/opt/share/applications/
+install -m 0644 data/*.edj %{buildroot}%{navi_PREFIX}/data/
+install -m 0644 org.tizen.ico.app-samplenavi.desktop %{buildroot}/opt/share/applications/
+cp -r res %{buildroot}%{navi_PREFIX}/.
+
+# configurations(DemoMeterApp.wgt DemoAudioApp.wgt)
+mkdir -p %{buildroot}/tmp/
+install -m 0644 wgt/*.wgt %{buildroot}/tmp/
+#mkdir -p %{buildroot}/opt/apps/homescreen-sample-app/wgt/
+#install -m 0644 wgt/*.wgt %{buildroot}/opt/apps/homescreen-sample-app/wgt/
+#install -m 0644 wgt/wgt-install.sh %{buildroot}/opt/apps/homescreen-sample-app/wgt/
+#install -m 0644 wgt/wgt-uninstall.sh %{buildroot}/opt/apps/homescreen-sample-app/wgt/
+
+%files
+%defattr(-,root,root,-)
+# files(ico-app-soundsample)
+%{sound_PREFIX}/bin/ico-app-soundsample
+%{sound_PREFIX}/res/soundsample_config.txt
+%{sound_PREFIX}/res/icons/default/small/org.tizen.ico.app-soundsample.png
+%{sound_PREFIX}/sounds/musicbox.wav
+/opt/share/applications/org.tizen.ico.app-soundsample.desktop
+
+# files(ico-app-vicsample)
+%{vic_PREFIX}/bin/ico-app-vicsample
+%{vic_PREFIX}/res/vicsample_config.txt
+%{vic_PREFIX}/res/icons/default/small/org.tizen.ico.app-vicsample.png
+/opt/share/applications/org.tizen.ico.app-vicsample.desktop
+
+# files(ico-app-samplenavi)
+%{navi_PREFIX}/bin/ico-app-samplenavi
+%{navi_PREFIX}/data/*.edj
+%{navi_PREFIX}/res
+/opt/share/applications/org.tizen.ico.app-samplenavi.desktop
+
+# files(DemoMeterApp.wgt DemoAudioApp.wgt)
+/tmp/*.wgt
+#/opt/apps/homescreen-sample-app/wgt/*.wgt
+#/opt/apps/homescreen-sample-app/wgt/wgt-install.sh
+#/opt/apps/homescreen-sample-app/wgt/wgt-uninstall.sh
+
+%post
+# install shell(DemoMeterApp.wgt DemoAudioApp.wgt)
+#sh /opt/apps/homescreen-sample-app/wgt/wgt-install.sh
+wrt-installer -i /tmp/DemoMeterApp.wgt
+wrt-installer -i /tmp/DemoAudioApp.wgt
+rm -f /tmp/DemoMeterApp.wgt
+rm -f /tmp/DemoAudioApp.wgt
+
+%preun
+# uninstall shell(DemoMeterApp.wgt DemoAudioApp.wgt)
+#sh /opt/apps/homescreen-sample-app/wgt/wgt-uninstall.sh
+
+%postun
+id=`wrt-launcher -l | grep -e " DemoMeterApp " | sed -e 's/\s\{1,\}/ /g' | cut -d' ' -f3`
+wrt-installer -u $id
+id=`wrt-launcher -l | grep -e " DemoAudioApp " | sed -e 's/\s\{1,\}/ /g' | cut -d' ' -f3`
+wrt-installer -u $id
--- /dev/null
+/*! jQuery Mobile v1.0 jquerymobile.com | jquery.org/license */
+.ui-bar-a{border:1px solid #2a2a2a;background:#111;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#111));background-image:-webkit-linear-gradient(#3c3c3c,#111);background-image:-moz-linear-gradient(#3c3c3c,#111);background-image:-ms-linear-gradient(#3c3c3c,#111);background-image:-o-linear-gradient(#3c3c3c,#111);background-image:linear-gradient(#3c3c3c,#111)}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a .ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-a .ui-link:hover{color:#2489ce}.ui-bar-a .ui-link:active{color:#2489ce}.ui-bar-a .ui-link:visited{color:#2489ce}.ui-body-a,.ui-dialog.ui-overlay-a{border:1px solid #2a2a2a;background:#222;color:#fff;text-shadow:0 1px 0 #000;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#666),to(#222));background-image:-webkit-linear-gradient(#666,#222);background-image:-moz-linear-gradient(#666,#222);background-image:-ms-linear-gradient(#666,#222);background-image:-o-linear-gradient(#666,#222);background-image:linear-gradient(#666,#222)}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:bold}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-body-a .ui-link:visited{color:#2489ce}.ui-btn-up-a{border:1px solid #222;background:#333;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#555),to(#333));background-image:-webkit-linear-gradient(#555,#333);background-image:-moz-linear-gradient(#555,#333);background-image:-ms-linear-gradient(#555,#333);background-image:-o-linear-gradient(#555,#333);background-image:linear-gradient(#555,#333)}.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#666),to(#444));background-image:-webkit-linear-gradient(#666,#444);background-image:-moz-linear-gradient(#666,#444);background-image:-ms-linear-gradient(#666,#444);background-image:-o-linear-gradient(#666,#444);background-image:linear-gradient(#666,#444)}.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#3d3d3d;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#333),to(#5a5a5a));background-image:-webkit-linear-gradient(#333,#5a5a5a);background-image:-moz-linear-gradient(#333,#5a5a5a);background-image:-ms-linear-gradient(#333,#5a5a5a);background-image:-o-linear-gradient(#333,#5a5a5a);background-image:linear-gradient(#333,#5a5a5a)}.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #254f7a;background-image:-webkit-gradient(linear,left top,left bottom,from(#81a8ce),to(#5e87b0));background-image:-webkit-linear-gradient(#81a8ce,#5e87b0);background-image:-moz-linear-gradient(#81a8ce,#5e87b0);background-image:-ms-linear-gradient(#81a8ce,#5e87b0);background-image:-o-linear-gradient(#81a8ce,#5e87b0);background-image:linear-gradient(#81a8ce,#5e87b0)}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b .ui-link{color:#ddf0f8;font-weight:bold}.ui-bar-b .ui-link:hover{color:#ddf0f8}.ui-bar-b .ui-link:active{color:#ddf0f8}.ui-bar-b .ui-link:visited{color:#ddf0f8}.ui-body-b,.ui-dialog.ui-overlay-b{border:1px solid #c6c6c6;background:#ccc;color:#333;text-shadow:0 1px 0 #fff;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#e6e6e6),to(#ccc));background-image:-webkit-linear-gradient(#e6e6e6,#ccc);background-image:-moz-linear-gradient(#e6e6e6,#ccc);background-image:-ms-linear-gradient(#e6e6e6,#ccc);background-image:-o-linear-gradient(#e6e6e6,#ccc);background-image:linear-gradient(#e6e6e6,#ccc)}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:bold}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-body-b .ui-link:visited{color:#2489ce}.ui-btn-up-b{border:1px solid #145072;background:#2567ab;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #145072;background-image:-webkit-gradient(linear,left top,left bottom,from(#5f9cc5),to(#396b9e));background-image:-webkit-linear-gradient(#5f9cc5,#396b9e);background-image:-moz-linear-gradient(#5f9cc5,#396b9e);background-image:-ms-linear-gradient(#5f9cc5,#396b9e);background-image:-o-linear-gradient(#5f9cc5,#396b9e);background-image:linear-gradient(#5f9cc5,#396b9e)}.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00516e;background:#4b88b6;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #014d68;background-image:-webkit-gradient(linear,left top,left bottom,from(#72b0d4),to(#4b88b6));background-image:-webkit-linear-gradient(#72b0d4,#4b88b6);background-image:-moz-linear-gradient(#72b0d4,#4b88b6);background-image:-ms-linear-gradient(#72b0d4,#4b88b6);background-image:-o-linear-gradient(#72b0d4,#4b88b6);background-image:linear-gradient(#72b0d4,#4b88b6)}.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:bold;color:#fff;text-shadow:0 -1px 1px #225377;background-image:-webkit-gradient(linear,left top,left bottom,from(#396b9e),to(#4e89c5));background-image:-webkit-linear-gradient(#396b9e,#4e89c5);background-image:-moz-linear-gradient(#396b9e,#4e89c5);background-image:-ms-linear-gradient(#396b9e,#4e89c5);background-image:-o-linear-gradient(#396b9e,#4e89c5);background-image:linear-gradient(#396b9e,#4e89c5)}.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#e9eaeb;color:#3e3e3e;font-weight:bold;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#e9eaeb));background-image:-webkit-linear-gradient(#f0f0f0,#e9eaeb);background-image:-moz-linear-gradient(#f0f0f0,#e9eaeb);background-image:-ms-linear-gradient(#f0f0f0,#e9eaeb);background-image:-o-linear-gradient(#f0f0f0,#e9eaeb);background-image:linear-gradient(#f0f0f0,#e9eaeb)}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c .ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-c .ui-link:hover{color:#2489ce}.ui-bar-c .ui-link:active{color:#2489ce}.ui-bar-c .ui-link:visited{color:#2489ce}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c,.ui-dialog.ui-overlay-c{border:1px solid #b3b3b3;color:#333;text-shadow:0 1px 0 #fff;background:#f0f0f0;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#ddd));background-image:-webkit-linear-gradient(#eee,#ddd);background-image:-moz-linear-gradient(#eee,#ddd);background-image:-ms-linear-gradient(#eee,#ddd);background-image:-o-linear-gradient(#eee,#ddd);background-image:linear-gradient(#eee,#ddd)}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:bold}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-body-c .ui-link:visited{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:bold;color:#444;text-shadow:0 1px 1px #f6f6f6;background-image:-webkit-gradient(linear,left top,left bottom,from(#fdfdfd),to(#eee));background-image:-webkit-linear-gradient(#fdfdfd,#eee);background-image:-moz-linear-gradient(#fdfdfd,#eee);background-image:-ms-linear-gradient(#fdfdfd,#eee);background-image:-o-linear-gradient(#fdfdfd,#eee);background-image:linear-gradient(#fdfdfd,#eee)}.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dadada;font-weight:bold;color:#101010;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ededed),to(#dadada));background-image:-webkit-linear-gradient(#ededed,#dadada);background-image:-moz-linear-gradient(#ededed,#dadada);background-image:-ms-linear-gradient(#ededed,#dadada);background-image:-o-linear-gradient(#ededed,#dadada);background-image:linear-gradient(#ededed,#dadada)}.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #808080;background:#fdfdfd;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fdfdfd));background-image:-webkit-linear-gradient(#eee,#fdfdfd);background-image:-moz-linear-gradient(#eee,#fdfdfd);background-image:-ms-linear-gradient(#eee,#fdfdfd);background-image:-o-linear-gradient(#eee,#fdfdfd);background-image:linear-gradient(#eee,#fdfdfd)}.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #ccc;background:#bbb;color:#333;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#bbb));background-image:-webkit-linear-gradient(#ddd,#bbb);background-image:-moz-linear-gradient(#ddd,#bbb);background-image:-ms-linear-gradient(#ddd,#bbb);background-image:-o-linear-gradient(#ddd,#bbb);background-image:linear-gradient(#ddd,#bbb)}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d .ui-link{color:#2489ce;font-weight:bold}.ui-bar-d .ui-link:hover{color:#2489ce}.ui-bar-d .ui-link:active{color:#2489ce}.ui-bar-d .ui-link:visited{color:#2489ce}.ui-body-d,.ui-dialog.ui-overlay-d{border:1px solid #ccc;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:bold}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-body-d .ui-link:visited{color:#2489ce}.ui-btn-up-d{border:1px solid #ccc;background:#fff;font-weight:bold;color:#444;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#222;cursor:pointer;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fdfdfd),to(#eee));background-image:-webkit-linear-gradient(#fdfdfd,#eee);background-image:-moz-linear-gradient(#fdfdfd,#eee);background-image:-ms-linear-gradient(#fdfdfd,#eee);background-image:-o-linear-gradient(#fdfdfd,#eee);background-image:linear-gradient(#fdfdfd,#eee)}.ui-btn-hover-d a.ui-link-inherit{color:#222}.ui-btn-down-d{border:1px solid #aaa;background:#fff;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:-webkit-linear-gradient(#eee,#fff);background-image:-moz-linear-gradient(#eee,#fff);background-image:-ms-linear-gradient(#eee,#fff);background-image:-o-linear-gradient(#eee,#fff);background-image:linear-gradient(#eee,#fff)}.ui-btn-down-d a.ui-link-inherit{color:#111}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fadb4e));background-image:-webkit-linear-gradient(#fceda7,#fadb4e);background-image:-moz-linear-gradient(#fceda7,#fadb4e);background-image:-ms-linear-gradient(#fceda7,#fadb4e);background-image:-o-linear-gradient(#fceda7,#fadb4e);background-image:linear-gradient(#fceda7,#fadb4e)}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e .ui-link{color:#2489ce;font-weight:bold}.ui-bar-e .ui-link:hover{color:#2489ce}.ui-bar-e .ui-link:active{color:#2489ce}.ui-bar-e .ui-link:visited{color:#2489ce}.ui-body-e,.ui-dialog.ui-overlay-e{border:1px solid #f7c942;color:#333;text-shadow:0 1px 0 #fff;background:#faeb9e;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#faeb9e));background-image:-webkit-linear-gradient(#fff,#faeb9e);background-image:-moz-linear-gradient(#fff,#faeb9e);background-image:-ms-linear-gradient(#fff,#faeb9e);background-image:-o-linear-gradient(#fff,#faeb9e);background-image:linear-gradient(#fff,#faeb9e)}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif}.ui-body-e .ui-link-inherit{color:#333}.ui-body-e .ui-link{color:#2489ce;font-weight:bold}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-body-e .ui-link:visited{color:#2489ce}.ui-btn-up-e{border:1px solid #f7c942;background:#fadb4e;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fadb4e));background-image:-webkit-linear-gradient(#fceda7,#fadb4e);background-image:-moz-linear-gradient(#fceda7,#fadb4e);background-image:-ms-linear-gradient(#fceda7,#fadb4e);background-image:-o-linear-gradient(#fceda7,#fadb4e);background-image:linear-gradient(#fceda7,#fadb4e)}.ui-btn-up-e a.ui-link-inherit{color:#333}.ui-btn-hover-e{border:1px solid #e79952;background:#fbe26f;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf0b5),to(#fbe26f));background-image:-webkit-linear-gradient(#fcf0b5,#fbe26f);background-image:-moz-linear-gradient(#fcf0b5,#fbe26f);background-image:-ms-linear-gradient(#fcf0b5,#fbe26f);background-image:-o-linear-gradient(#fcf0b5,#fbe26f);background-image:linear-gradient(#fcf0b5,#fbe26f)}.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f7c942;background:#fceda7;font-weight:bold;color:#111;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fadb4e),to(#fceda7));background-image:-webkit-linear-gradient(#fadb4e,#fceda7);background-image:-moz-linear-gradient(#fadb4e,#fceda7);background-image:-ms-linear-gradient(#fadb4e,#fceda7);background-image:-o-linear-gradient(#fadb4e,#fceda7);background-image:linear-gradient(#fadb4e,#fceda7)}.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #155678;background:#4596ce;font-weight:bold;color:#fff;cursor:pointer;text-shadow:0 -1px 1px #145072;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(#85bae4),to(#5393c5));background-image:-webkit-linear-gradient(#85bae4,#5393c5);background-image:-moz-linear-gradient(#85bae4,#5393c5);background-image:-ms-linear-gradient(#85bae4,#5393c5);background-image:-o-linear-gradient(#85bae4,#5393c5);background-image:linear-gradient(#85bae4,#5393c5);font-family:Helvetica,Arial,sans-serif}.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-tl{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em}.ui-corner-tr{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bl{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-br{-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-top{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-right{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-left{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-all{-moz-border-radius:.6em;-webkit-border-radius:.6em;border-radius:.6em}.ui-corner-none{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.ui-br{border-bottom:#828282;border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid}.ui-disabled{opacity:.3}.ui-disabled,.ui-disabled a{pointer-events:none;cursor:default}.ui-icon,.ui-icon-searchfield:after{background:#666;background:rgba(0,0,0,.4);background-image:url(images/icons-18-white.png);background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px}.ui-icon-alt{background-image:url(images/icons-36-black.png)}}.ui-icon-plus{background-position:-0 50%}.ui-icon-minus{background-position:-36px 50%}.ui-icon-delete{background-position:-72px 50%}.ui-icon-arrow-r{background-position:-108px 50%}.ui-icon-arrow-l{background-position:-144px 50%}.ui-icon-arrow-u{background-position:-180px 50%}.ui-icon-arrow-d{background-position:-216px 50%}.ui-icon-check{background-position:-252px 50%}.ui-icon-gear{background-position:-288px 50%}.ui-icon-refresh{background-position:-324px 50%}.ui-icon-forward{background-position:-360px 50%}.ui-icon-back{background-position:-396px 50%}.ui-icon-grid{background-position:-432px 50%}.ui-icon-star{background-position:-468px 50%}.ui-icon-alert{background-position:-504px 50%}.ui-icon-info{background-position:-540px 50%}.ui-icon-home{background-position:-576px 50%}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%}.ui-icon-checkbox-off{background-position:-684px 50%}.ui-icon-checkbox-on{background-position:-648px 50%}.ui-icon-radio-off{background-position:-756px 50%}.ui-icon-radio-on{background-position:-720px 50%}.ui-checkbox .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#4596ce}.ui-icon-loading{background-image:url(images/ajax-loader.png);width:40px;height:40px;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;background-size:35px 35px}.ui-btn-corner-tl{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em}.ui-btn-corner-tr{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-br{-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-top{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-right{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-left{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-all{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.ui-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50);position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 1px 4px rgba(0,0,0,.3)}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus{outline-width:2px}.ui-mobile,.ui-mobile body{height:100%}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border:0}.ui-mobile-viewport{margin:0;overflow-x:visible;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.ui-mobile [data-role=page],.ui-mobile [data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-mobile .ui-page-active{display:block;overflow:visible}.ui-page{outline:0}@media screen and (orientation:portrait){.ui-mobile,.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile,.ui-mobile .ui-page{min-height:300px}}.ui-page.ui-mobile-touch-overflow,.ui-mobile-touch-overflow.ui-native-fixed .ui-content{overflow:auto;height:100%;-webkit-overflow-scrolling:touch;-moz-overflow-scrolling:touch;-o-overflow-scrolling:touch;-ms-overflow-scrolling:touch;overflow-scrolling:touch}.ui-page.ui-mobile-touch-overflow,.ui-page.ui-mobile-touch-overflow *{-webkit-transform:rotateY(0)}.ui-page.ui-mobile-pre-transition{display:block}.ui-loading .ui-mobile-viewport{overflow:hidden!important}.ui-loading .ui-loader{display:block}.ui-loading .ui-page{overflow:hidden}.ui-loader{display:none;position:absolute;opacity:.85;z-index:100;left:50%;width:200px;margin-left:-130px;margin-top:-35px;padding:10px 30px}.ui-loader h1{font-size:15px;text-align:center}.ui-loader .ui-icon{position:static;display:block;opacity:.9;margin:0 auto;width:35px;height:35px;background-color:transparent}.ui-mobile-rendering>*{visibility:hidden}.ui-bar,.ui-body{position:relative;padding:.4em 15px;overflow:hidden;display:block;clear:both}.ui-bar{font-size:16px;margin:0}.ui-bar h1,.ui-bar h2,.ui-bar h3,.ui-bar h4,.ui-bar h5,.ui-bar h6{margin:0;padding:0;font-size:16px;display:inline-block}.ui-header,.ui-footer{display:block}.ui-page .ui-header,.ui-page .ui-footer{position:relative}.ui-header .ui-btn-left{position:absolute;left:10px;top:.4em}.ui-header .ui-btn-right{position:absolute;right:10px;top:.4em}.ui-header .ui-title,.ui-footer .ui-title{min-height:1.1em;text-align:center;font-size:16px;display:block;margin:.6em 90px .8em;padding:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;outline:0!important}.ui-footer .ui-title{margin:.6em 15px .8em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.ui-page-fullscreen .ui-content{padding:0}.ui-mobile-touch-overflow.ui-page.ui-native-fixed,.ui-mobile-touch-overflow.ui-page.ui-native-fullscreen{overflow:visible}.ui-mobile-touch-overflow.ui-native-fixed .ui-header,.ui-mobile-touch-overflow.ui-native-fixed .ui-footer{position:fixed;left:0;right:0;top:0;z-index:200}.ui-mobile-touch-overflow.ui-page.ui-native-fixed .ui-footer{top:auto;bottom:0}.ui-mobile-touch-overflow.ui-native-fixed .ui-content{padding-top:2.5em;padding-bottom:3em;top:0;bottom:0;height:auto;position:absolute}.ui-mobile-touch-overflow.ui-native-fullscreen .ui-content{padding-top:0;padding-bottom:0}.ui-mobile-touch-overflow.ui-native-fullscreen .ui-header,.ui-mobile-touch-overflow.ui-native-fullscreen .ui-footer{opacity:.9}.ui-native-bars-hidden{display:none}.ui-icon{width:18px;height:18px}.ui-fullscreen img{max-width:100%}.ui-nojs{position:absolute;left:-9999px}.ui-hide-label label,.ui-hidden-accessible{position:absolute!important;left:-9999px;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.spin{-webkit-transform:rotate(360deg);-webkit-animation-name:spin;-webkit-animation-duration:1s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}.in,.out{-webkit-animation-timing-function:ease-in-out;-webkit-animation-duration:350ms}.slide.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft}.slide.in{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromright}.slide.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright}.slide.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromleft}.slideup.out{-webkit-animation-name:dontmove;z-index:0}.slideup.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfrombottom;z-index:10}.slideup.in.reverse{z-index:0;-webkit-animation-name:dontmove}.slideup.out.reverse{-webkit-transform:translateY(100%);z-index:10;-webkit-animation-name:slideouttobottom}.slidedown.out{-webkit-animation-name:dontmove;z-index:0}.slidedown.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfromtop;z-index:10}.slidedown.in.reverse{z-index:0;-webkit-animation-name:dontmove}.slidedown.out.reverse{-webkit-transform:translateY(-100%);z-index:10;-webkit-animation-name:slideouttotop}@-webkit-keyframes slideinfromright{from{-webkit-transform:translateX(100%)}to{-webkit-transform:translateX(0)}}@-webkit-keyframes slideinfromleft{from{-webkit-transform:translateX(-100%)}to{-webkit-transform:translateX(0)}}@-webkit-keyframes slideouttoleft{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(-100%)}}@-webkit-keyframes slideouttoright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(100%)}}@-webkit-keyframes slideinfromtop{from{-webkit-transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@-webkit-keyframes slideinfrombottom{from{-webkit-transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@-webkit-keyframes slideouttobottom{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@-webkit-keyframes slideouttotop{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeout{from{opacity:1}to{opacity:0}}.fade.out{z-index:0;-webkit-animation-name:fadeout}.fade.in{opacity:1;z-index:10;-webkit-animation-name:fadein}.viewport-flip{-webkit-perspective:1000;position:absolute}.ui-mobile-viewport-transitioning,.ui-mobile-viewport-transitioning .ui-page{width:100%;height:100%;overflow:hidden}.flip{-webkit-animation-duration:.65s;-webkit-backface-visibility:hidden;-webkit-transform:translateX(0)}.flip.out{-webkit-transform:rotateY(-180deg) scale(.8);-webkit-animation-name:flipouttoleft}.flip.in{-webkit-transform:rotateY(0) scale(1);-webkit-animation-name:flipinfromleft}.flip.out.reverse{-webkit-transform:rotateY(180deg) scale(.8);-webkit-animation-name:flipouttoright}.flip.in.reverse{-webkit-transform:rotateY(0) scale(1);-webkit-animation-name:flipinfromright}@-webkit-keyframes flipinfromright{from{-webkit-transform:rotateY(-180deg) scale(.8)}to{-webkit-transform:rotateY(0) scale(1)}}@-webkit-keyframes flipinfromleft{from{-webkit-transform:rotateY(180deg) scale(.8)}to{-webkit-transform:rotateY(0) scale(1)}}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0) scale(1)}to{-webkit-transform:rotateY(-180deg) scale(.8)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0) scale(1)}to{-webkit-transform:rotateY(180deg) scale(.8)}}@-webkit-keyframes dontmove{from{opacity:1}to{opacity:1}}.pop{-webkit-transform-origin:50% 50%}.pop.in{-webkit-transform:scale(1);opacity:1;-webkit-animation-name:popin;z-index:10}.pop.in.reverse{z-index:0;-webkit-animation-name:dontmove}.pop.out.reverse{-webkit-transform:scale(.2);opacity:0;-webkit-animation-name:popout;z-index:10}@-webkit-keyframes popin{from{-webkit-transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-webkit-keyframes popout{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.2);opacity:0}}.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d{overflow:hidden}.ui-block-a,.ui-block-b,.ui-block-c,.ui-block-d,.ui-block-e{margin:0;padding:0;border:0;float:left;min-height:1px}.ui-grid-solo .ui-block-a{width:100%;float:none}.ui-grid-a .ui-block-a,.ui-grid-a .ui-block-b{width:50%}.ui-grid-a .ui-block-a{clear:left}.ui-grid-b .ui-block-a,.ui-grid-b .ui-block-b,.ui-grid-b .ui-block-c{width:33.333%}.ui-grid-b .ui-block-a{clear:left}.ui-grid-c .ui-block-a,.ui-grid-c .ui-block-b,.ui-grid-c .ui-block-c,.ui-grid-c .ui-block-d{width:25%}.ui-grid-c .ui-block-a{clear:left}.ui-grid-d .ui-block-a,.ui-grid-d .ui-block-b,.ui-grid-d .ui-block-c,.ui-grid-d .ui-block-d,.ui-grid-d .ui-block-e{width:20%}.ui-grid-d .ui-block-a{clear:left}.ui-header,.ui-footer,.ui-page-fullscreen .ui-header,.ui-page-fullscreen .ui-footer{position:absolute;overflow:hidden;width:100%;border-left-width:0;border-right-width:0}.ui-header-fixed,.ui-footer-fixed{z-index:1000;-webkit-transform:translateZ(0)}.ui-footer-duplicate,.ui-page-fullscreen .ui-fixed-inline{display:none}.ui-page-fullscreen .ui-header,.ui-page-fullscreen .ui-footer{opacity:.9}.ui-navbar{overflow:hidden}.ui-navbar ul,.ui-navbar-expanded ul{list-style:none;padding:0;margin:0;position:relative;display:block;border:0}.ui-navbar-collapsed ul{float:left;width:75%;margin-right:-2px}.ui-navbar-collapsed .ui-navbar-toggle{float:left;width:25%}.ui-navbar li.ui-navbar-truncate{position:absolute;left:-9999px;top:-9999px}.ui-navbar li .ui-btn,.ui-navbar .ui-navbar-toggle .ui-btn{display:block;font-size:12px;text-align:center;margin:0;border-right-width:0}.ui-navbar li .ui-btn{margin-right:-1px}.ui-navbar li .ui-btn:last-child{margin-right:0}.ui-header .ui-navbar li .ui-btn,.ui-header .ui-navbar .ui-navbar-toggle .ui-btn,.ui-footer .ui-navbar li .ui-btn,.ui-footer .ui-navbar .ui-navbar-toggle .ui-btn{border-top-width:0;border-bottom-width:0}.ui-navbar .ui-btn-inner{padding-left:2px;padding-right:2px}.ui-navbar-noicons li .ui-btn .ui-btn-inner,.ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner{padding-top:.8em;padding-bottom:.9em}.ui-navbar-expanded .ui-btn{margin:0;font-size:14px}.ui-navbar-expanded .ui-btn-inner{padding-left:5px;padding-right:5px}.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner{padding:45px 5px 15px;text-align:center}.ui-navbar-expanded .ui-btn-icon-top .ui-icon{top:15px}.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner{padding:15px 5px 45px;text-align:center}.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon{bottom:15px}.ui-navbar-expanded li .ui-btn .ui-btn-inner{min-height:2.5em}.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner{padding-top:1.8em;padding-bottom:1.9em}.ui-btn{display:block;text-align:center;cursor:pointer;position:relative;margin:.5em 5px;padding:0}.ui-header .ui-btn,.ui-footer .ui-btn,.ui-bar .ui-btn{display:inline-block;font-size:13px;margin:0}.ui-btn-inline{display:inline-block}.ui-btn-inner{padding:.6em 25px;display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative;zoom:1}.ui-btn input,.ui-btn button{z-index:2}.ui-header .ui-btn-inner,.ui-footer .ui-btn-inner,.ui-bar .ui-btn-inner{padding:.4em 8px .5em}.ui-btn-icon-notext{width:24px;height:24px}.ui-btn-icon-notext .ui-btn-inner{padding:2px 1px 2px 3px}.ui-btn-text{position:relative;z-index:1}.ui-btn-icon-notext .ui-btn-text{position:absolute;left:-9999px}.ui-btn-icon-left .ui-btn-inner{padding-left:33px}.ui-header .ui-btn-icon-left .ui-btn-inner,.ui-footer .ui-btn-icon-left .ui-btn-inner,.ui-bar .ui-btn-icon-left .ui-btn-inner{padding-left:27px}.ui-btn-icon-right .ui-btn-inner{padding-right:33px}.ui-header .ui-btn-icon-right .ui-btn-inner,.ui-footer .ui-btn-icon-right .ui-btn-inner,.ui-bar .ui-btn-icon-right .ui-btn-inner{padding-right:27px}.ui-btn-icon-top .ui-btn-inner{padding-top:33px}.ui-header .ui-btn-icon-top .ui-btn-inner,.ui-footer .ui-btn-icon-top .ui-btn-inner,.ui-bar .ui-btn-icon-top .ui-btn-inner{padding-top:27px}.ui-btn-icon-bottom .ui-btn-inner{padding-bottom:33px}.ui-header .ui-btn-icon-bottom .ui-btn-inner,.ui-footer .ui-btn-icon-bottom .ui-btn-inner,.ui-bar .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:27px}.ui-btn-icon-notext .ui-icon{display:block;z-index:0}.ui-btn-icon-left .ui-icon,.ui-btn-icon-right .ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-btn-icon-top .ui-icon,.ui-btn-icon-bottom .ui-icon{position:absolute;left:50%;margin-left:-9px}.ui-btn-icon-left .ui-icon{left:10px}.ui-btn-icon-right .ui-icon{right:10px}.ui-btn-icon-top .ui-icon{top:10px}.ui-btn-icon-bottom .ui-icon{bottom:10px}.ui-header .ui-btn-icon-left .ui-icon,.ui-footer .ui-btn-icon-left .ui-icon,.ui-bar .ui-btn-icon-left .ui-icon{left:4px}.ui-header .ui-btn-icon-right .ui-icon,.ui-footer .ui-btn-icon-right .ui-icon,.ui-bar .ui-btn-icon-right .ui-icon{right:4px}.ui-header .ui-btn-icon-top .ui-icon,.ui-footer .ui-btn-icon-top .ui-icon,.ui-bar .ui-btn-icon-top .ui-icon{top:4px}.ui-header .ui-btn-icon-bottom .ui-icon,.ui-footer .ui-btn-icon-bottom .ui-icon,.ui-bar .ui-btn-icon-bottom .ui-icon{bottom:4px}.ui-btn-hidden{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-appearance:button;opacity:.1;cursor:pointer;background:#fff;background:rgba(255,255,255,0);filter:Alpha(Opacity=.0001);font-size:1px;border:0;line-height:999px}.ui-collapsible{margin:.5em 0}.ui-collapsible-heading{font-size:16px;display:block;margin:0 -8px;padding:0;border-width:0 0 1px 0;position:relative}.ui-collapsible-heading a{text-align:left;margin:0}.ui-collapsible-heading a .ui-btn-inner{padding-left:40px}.ui-collapsible-heading a span.ui-btn{position:absolute;left:6px;top:50%;margin:-12px 0 0 0;width:20px;height:20px;padding:1px 0 1px 2px;text-indent:-9999px}.ui-collapsible-heading a span.ui-btn .ui-btn-inner{padding:10px 0}.ui-collapsible-heading a span.ui-btn .ui-icon{left:0;margin-top:-10px}.ui-collapsible-heading-status{position:absolute;top:-9999px;left:0}.ui-collapsible-content{display:block;margin:0 -8px;padding:10px 16px;border-top:0;background-image:none;font-weight:normal}.ui-collapsible-content-collapsed{display:none}.ui-collapsible-set{margin:.5em 0}.ui-collapsible-set .ui-collapsible{margin:-1px 0 0}.ui-controlgroup,fieldset.ui-controlgroup{padding:0;margin:.5em 0 1em}.ui-bar .ui-controlgroup{margin:0 .3em}.ui-controlgroup-label{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em}.ui-controlgroup-controls{display:block;width:100%}.ui-controlgroup li{list-style:none}.ui-controlgroup-vertical .ui-btn,.ui-controlgroup-vertical .ui-checkbox,.ui-controlgroup-vertical .ui-radio{margin:0;border-bottom-width:0}.ui-controlgroup-controls label.ui-select{position:absolute;left:-9999px}.ui-controlgroup-vertical .ui-controlgroup-last{border-bottom-width:1px}.ui-controlgroup-horizontal{padding:0}.ui-controlgroup-horizontal .ui-btn,.ui-controlgroup-horizontal .ui-select{display:inline-block;margin:0 -5px 0 0}.ui-controlgroup-horizontal .ui-checkbox,.ui-controlgroup-horizontal .ui-radio{float:left;margin:0 -1px 0 0}.ui-controlgroup-horizontal .ui-checkbox .ui-btn,.ui-controlgroup-horizontal .ui-radio .ui-btn,.ui-controlgroup-horizontal .ui-checkbox:last-child,.ui-controlgroup-horizontal .ui-radio:last-child{margin-right:0}.ui-controlgroup-horizontal .ui-controlgroup-last{margin-right:0}.ui-controlgroup .ui-checkbox label,.ui-controlgroup .ui-radio label{font-size:16px}@media all and (min-width:450px){.ui-field-contain .ui-controlgroup-label{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-controlgroup-controls{width:60%;display:inline-block}.ui-field-contain .ui-controlgroup .ui-select{width:100%}.ui-field-contain .ui-controlgroup-horizontal .ui-select{width:auto}}.ui-dialog{min-height:480px}.ui-dialog .ui-header,.ui-dialog .ui-content,.ui-dialog .ui-footer{max-width:500px;margin:10% auto 15px auto;width:85%;position:relative}.ui-dialog .ui-header,.ui-dialog .ui-footer{padding:0 15px;z-index:10}.ui-dialog .ui-content{padding:15px}.ui-dialog .ui-content,.ui-dialog .ui-footer{margin-top:-15px}.ui-checkbox,.ui-radio{position:relative;margin:.2em 0 .5em;z-index:1}.ui-checkbox .ui-btn,.ui-radio .ui-btn{margin:0;text-align:left;z-index:2}.ui-checkbox .ui-btn-inner,.ui-radio .ui-btn-inner{white-space:normal}.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner{padding-left:45px}.ui-checkbox .ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-checkbox .ui-icon,.ui-radio .ui-icon{top:1.1em}.ui-checkbox .ui-btn-icon-left .ui-icon,.ui-radio .ui-btn-icon-left .ui-icon{left:15px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox input,.ui-radio input{position:absolute;left:20px;top:50%;width:10px;height:10px;margin:-5px 0 0 0;outline:0!important;z-index:1}.ui-field-contain{padding:1.5em 0;margin:0;border-bottom-width:1px;overflow:visible}.ui-field-contain:first-child{border-top-width:0}@media all and (min-width:450px){.ui-field-contain{border-width:0;padding:0;margin:1em 0}}.ui-select{display:block;position:relative}.ui-select select{position:absolute;left:-9999px;top:-9999px}.ui-select .ui-btn{overflow:hidden}.ui-select .ui-btn{opacity:1}.ui-select .ui-btn select{cursor:pointer;-webkit-appearance:button;left:0;top:0;width:100%;min-height:1.5em;min-height:100%;height:3em;max-height:100%;opacity:0;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);z-index:2}.ui-select .ui-disabled{opacity:.3}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:.0001}}.ui-select .ui-btn select.ui-select-nativeonly{opacity:1;text-indent:0}.ui-select .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-select .ui-btn-icon-right .ui-icon{right:15px}label.ui-select{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}.ui-select .ui-btn-text,.ui-selectmenu .ui-btn-text{display:block;min-height:1em;overflow:hidden}.ui-select .ui-btn-text{text-overflow:ellipsis}.ui-selectmenu{position:absolute;padding:0;z-index:1100!important;width:80%;max-width:350px;padding:6px}.ui-selectmenu .ui-listview{margin:0}.ui-selectmenu .ui-btn.ui-li-divider{cursor:default}.ui-selectmenu-hidden{top:-9999px;left:-9999px}.ui-selectmenu-screen{position:absolute;top:0;left:0;width:100%;height:100%;z-index:99}.ui-screen-hidden,.ui-selectmenu-list .ui-li .ui-icon{display:none}.ui-selectmenu-list .ui-li .ui-icon{display:block}.ui-li.ui-selectmenu-placeholder{display:none}.ui-selectmenu .ui-header .ui-title{margin:.6em 46px .8em}@media all and (min-width:450px){.ui-field-contain label.ui-select{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-select{width:60%;display:inline-block}}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:normal;margin:0 0 .3em}input.ui-input-text,textarea.ui-input-text{background-image:none;padding:.4em;line-height:1.4;font-size:16px;display:block;width:97%}input.ui-input-text{-webkit-appearance:none}textarea.ui-input-text{height:50px;-webkit-transition:height 200ms linear;-moz-transition:height 200ms linear;-o-transition:height 200ms linear;transition:height 200ms linear}.ui-input-search{padding:0 30px;background-image:none;position:relative}.ui-icon-searchfield:after{position:absolute;left:7px;top:50%;margin-top:-9px;content:"";width:18px;height:18px;opacity:.5}.ui-input-search input.ui-input-text{border:0;width:98%;padding:.4em 0;margin:0;display:block;background:transparent none;outline:0!important}.ui-input-search .ui-input-clear{position:absolute;right:0;top:50%;margin-top:-13px}.ui-input-search .ui-input-clear-hidden{display:none}@media all and (min-width:450px){.ui-field-contain label.ui-input-text{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text,.ui-field-contain .ui-input-search{width:60%;display:inline-block}.ui-field-contain .ui-input-search{width:50%}.ui-hide-label input.ui-input-text,.ui-hide-label textarea.ui-input-text,.ui-hide-label .ui-input-search{padding:.4em;width:97%}.ui-input-search input.ui-input-text{width:98%}}.ui-listview{margin:0;counter-reset:listnumbering}.ui-content .ui-listview{margin:-15px}.ui-content .ui-listview-inset{margin:1em 0}.ui-listview,.ui-li{list-style:none;padding:0}.ui-li,.ui-li.ui-field-contain{display:block;margin:0;position:relative;overflow:visible;text-align:left;border-width:0;border-top-width:1px}.ui-li .ui-btn-text a.ui-link-inherit{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-divider,.ui-li-static{padding:.5em 15px;font-size:14px;font-weight:bold}.ui-li-divider{counter-reset:listnumbering}ol.ui-listview .ui-link-inherit:before,ol.ui-listview .ui-li-static:before,.ui-li-dec{font-size:.8em;display:inline-block;padding-right:.3em;font-weight:normal;counter-increment:listnumbering;content:counter(listnumbering) ". "}ol.ui-listview .ui-li-jsnumbering:before{content:""!important}.ui-listview-inset .ui-li{border-right-width:1px;border-left-width:1px}.ui-li:last-child,.ui-li.ui-field-contain:last-child{border-bottom-width:1px}.ui-li>.ui-btn-inner{display:block;position:relative;padding:0}.ui-li .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li{padding:.7em 15px .7em 15px;display:block}.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-thumb{min-height:60px;padding-left:100px}.ui-li-has-icon .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-icon{min-height:20px;padding-left:40px}.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-count{padding-right:45px}.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow{padding-right:30px}.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow.ui-li-has-count{padding-right:75px}.ui-li-has-count .ui-btn-text{padding-right:15px}.ui-li-heading{font-size:16px;font-weight:bold;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-desc{font-size:12px;font-weight:normal;display:block;margin:-.5em 0 .6em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-thumb,.ui-listview .ui-li-icon{position:absolute;left:1px;top:0;max-height:80px;max-width:80px}.ui-listview .ui-li-icon{max-height:40px;max-width:40px;left:10px;top:.9em}.ui-li-thumb,.ui-listview .ui-li-icon,.ui-li-content{float:left;margin-right:10px}.ui-li-aside{float:right;width:50%;text-align:right;margin:.3em 0}@media all and (min-width:480px){.ui-li-aside{width:45%}}.ui-li-divider{cursor:default}.ui-li-has-alt .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt{padding-right:95px}.ui-li-has-count .ui-li-count{position:absolute;font-size:11px;font-weight:bold;padding:.2em .5em;top:50%;margin-top:-.9em;right:38px}.ui-li-divider .ui-li-count,.ui-li-static .ui-li-count{right:10px}.ui-li-has-alt .ui-li-count{right:55px}.ui-li-link-alt{position:absolute;width:40px;height:100%;border-width:0;border-left-width:1px;top:0;right:0;margin:0;padding:0;z-index:2}.ui-li-link-alt .ui-btn{overflow:hidden;position:absolute;right:8px;top:50%;margin:-11px 0 0 0;border-bottom-width:1px;z-index:-1}.ui-li-link-alt .ui-btn-inner{padding:0;height:100%;position:absolute;width:100%;top:0;left:0}.ui-li-link-alt .ui-btn .ui-icon{right:50%;margin-right:-9px}.ui-listview * .ui-btn-inner>.ui-btn>.ui-btn-inner{border-top:0}.ui-listview-filter{border-width:0;overflow:hidden;margin:-15px -15px 15px -15px}.ui-listview-filter .ui-input-search{margin:5px;width:auto;display:block}.ui-listview-filter-inset{margin:-15px -5px -15px -5px;background:transparent}.ui-li.ui-screen-hidden{display:none}@media only screen and (min-device-width:768px) and (max-device-width:1024px){.ui-li .ui-btn-text{overflow:visible}}label.ui-slider{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}input.ui-slider-input,.ui-field-contain input.ui-slider-input{display:inline-block;width:50px}select.ui-slider-switch{display:none}div.ui-slider{position:relative;display:inline-block;overflow:visible;height:15px;padding:0;margin:0 2% 0 20px;top:4px;width:60%}div.ui-slider-switch{width:99.8%}a.ui-slider-handle{position:absolute;z-index:10;top:50%;width:28px;height:28px;margin-top:-15px;margin-left:-15px}a.ui-slider-handle .ui-btn-inner{padding-left:0;padding-right:0}@media all and (min-width:480px){.ui-field-contain label.ui-slider{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain div.ui-slider{width:43%}}div.ui-slider-switch{height:32px;overflow:hidden;margin-left:0}div.ui-slider-inneroffset{margin-left:50%;position:absolute;top:1px;height:100%;width:50%}a.ui-slider-handle-snapping{-webkit-transition:left 70ms linear}div.ui-slider-labelbg{position:absolute;top:0;margin:0;border-width:0}div.ui-slider-switch div.ui-slider-labelbg-a{width:60%;height:100%;left:0}div.ui-slider-switch div.ui-slider-labelbg-b{width:60%;height:100%;right:0}.ui-slider-switch-a div.ui-slider-labelbg-a,.ui-slider-switch-b div.ui-slider-labelbg-b{z-index:-1}.ui-slider-switch-a div.ui-slider-labelbg-b,.ui-slider-switch-b div.ui-slider-labelbg-a{z-index:0}div.ui-slider-switch a.ui-slider-handle{z-index:20;width:101%;height:32px;margin-top:-18px;margin-left:-101%}span.ui-slider-label{width:100%;position:absolute;height:32px;font-size:16px;text-align:center;line-height:2;background:0;border-color:transparent}span.ui-slider-label-a{left:-100%;margin-right:-1px}span.ui-slider-label-b{right:-100%;margin-left:-1px}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.\r
+ *\r
+ * This program is licensed under the terms and conditions of the \r
+ * Apache License, version 2.0. The full text of the Apache License is at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ */\r
+\r
+html,body{\r
+ height: 100% ;\r
+}\r
+\r
+.base {\r
+ width: 100%;\r
+ height: 50%;\r
+}\r
+\r
+.map_area {\r
+ float: center;\r
+ width: 100%;\r
+ height: 480px;\r
+}\r
+\r
+#map_canvas {\r
+ float: center;\r
+ width: 100%;\r
+ height: 700px;\r
+}\r
--- /dev/null
+/*\r
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.\r
+ *\r
+ * This program is licensed under the terms and conditions of the \r
+ * Apache License, version 2.0. The full text of the Apache License is at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ */\r
+\r
+/**\r
+ * Navigation Application(sample navi) Accessor Class\r
+ *\r
+ */\r
+var CarInfo = function(lat_val, lon_val) {\r
+ this.lat_val = lat_val;\r
+ this.lon_val = lon_val;\r
+}\r
+\r
+var NativeAppAccessor = function() {\r
+ var _socket; // WebSocket\r
+ \r
+ /**\r
+ * Connection WebSocket\r
+ *\r
+ */\r
+ this.connectWebSocket = function() {\r
+ if ( navigator.userAgent.indexOf('Firefox') != -1 ) {\r
+ _socket = new MozWebSocket('ws://' + IP_ADDR + ':' + WEBSOCKET_PORT + '/');\r
+ }\r
+ else {\r
+ _socket = new WebSocket('ws://' + IP_ADDR + ':' + WEBSOCKET_PORT + '/', 'http-only');\r
+ }\r
+ \r
+ // socket event\r
+ _socket.onopen = function() {\r
+ _socket.send('OPEN ' + EDJE_PATH + EDJE_CONF_NAME);\r
+ };\r
+\r
+ _socket.onmessage = function(e) { recvMessage(e); };\r
+ _socket.onerror = function(e) { };\r
+ _socket.onclose = function() { };\r
+ }\r
+\r
+ /**\r
+ * Disconnection WebSocket\r
+ *\r
+ */\r
+ this.disconnectWebSocket = function() {\r
+ if ( _socket ) {\r
+ _socket.send('Close_Socket');\r
+ _socket.close();\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Request Navigation Start\r
+ */\r
+ this.sendReqNaviStart = function() {\r
+ if (_socket) {\r
+ $('#address').text('Send Req Navi Start.');\r
+ _socket.send('CHG SEQ REQ_NAV');\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Request Navigation End\r
+ */\r
+ this.sendReqNaviEnd = function() {\r
+ if (_socket) {\r
+ $('#address').text('Send Req Navi End.');\r
+ _socket.send('CHG SEQ END_NAV');\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Send Route\r
+ */\r
+ this.sendRoute = function( routeStr ) {\r
+ if( _socket ) {\r
+ _socket.send( routeStr );\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Receive Message\r
+ *\r
+ * @param event Receive Event\r
+ *\r
+ */\r
+ function recvMessage(event) {\r
+ var message = event.data;\r
+ var info;\r
+\r
+ var messageType = getMessageType(message);\r
+ if ( messageType == MSG_TYPE.CHG ) {\r
+ // type is carinfo change message\r
+ info = getCarInfo(message);\r
+ if ( info ) {\r
+ $(document).trigger('recvCarInfo', info);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ $(document).trigger('recvSeqNxt', message);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * get message type\r
+ *\r
+ * @param message Receive message\r
+ *\r
+ * @return message kind (MSG_TYPE)\r
+ *\r
+ */\r
+ function getMessageType(message) {\r
+ var cmd = message.slice(0, 7);\r
+ var type;\r
+\r
+ if ( cmd == 'CHG VAL') {\r
+ type = MSG_TYPE.CHG;\r
+ } else if (cmd == 'CHG SEQ') {\r
+ type = MSG_TYPE.SEQ;\r
+ } else {\r
+ type = MSG_TYPE.ERR;\r
+ }\r
+\r
+ return type;\r
+ }\r
+\r
+ /**\r
+ * Get CarInfo\r
+ *\r
+ * @param message Receive message\r
+ *\r
+ * @return CarInfo data\r
+ *\r
+ */\r
+ function getCarInfo(message) {\r
+ var tmp = message.slice(17);\r
+ var tmp_info;\r
+ var info;\r
+ var lat_index;\r
+ var lon_index;\r
+\r
+ lat_index = tmp.indexOf(KEY_LAT);\r
+ lon_index = tmp.indexOf(KEY_LON);\r
+\r
+ if ((lat_index != -1) && (lon_index != -1) ){\r
+ info = new CarInfo();\r
+\r
+ // Latitude\r
+ tmp_info = tmp.slice(lat_index + KEY_LAT.length + 1, lon_index);\r
+ info.lat_val = parseFloat(tmp_info);\r
+\r
+ // Longitude\r
+ tmp_info = tmp.slice(lon_index + KEY_LON.length + 1);\r
+ info.lon_val = parseFloat(tmp_info);\r
+ }\r
+\r
+ return info;\r
+ }\r
+\r
+ /**\r
+ * Request DIST ONSCREEN\r
+ */\r
+ this.sendReqDistOnScreen = function() {\r
+ if (_socket) {\r
+ $('#address').text("SEND REQ DIST OnScreen.");\r
+ try {\r
+ _socket.send('OPEN ' + EDJE_PATH + EDJE_DIST_NAME);\r
+ } catch (e) {\r
+ $('#address').text("SEND REQ DIST OnScreen Error. :" + e);\r
+ }\r
+ }\r
+ }\r
+ /**\r
+ * Request CLOSE ONSCREEN\r
+ */\r
+ this.sendReqCloseOnScreen = function() {\r
+ if (_socket) {\r
+ $('#address').text("SEND REQ Close OnScreen.");\r
+ _socket.send('CLOSE');\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+
+/**
+ * Navigation Map Class
+ */
+
+var Navigation = function() {
+ var _myLatLng; // Current Location
+ var _lat = TMP_LAT; // Current Latitude
+ var _lng = TMP_LON; // Current Longitude
+ var _dir; // Current Direction
+ var _map; // map
+ var _dirDisplay; // DirectionsRenderer Object
+ var _dirService; // DirectionsService Object
+ var _carMarker; // Current Location Marker
+ var _nativeAccessor; // WebSocket accessor (samplenavi)
+ var _seqnum = SEQUENCE_MODE.START; // Sequence
+ var _routeStr = ''; // Route Info
+
+ /*
+ * initialize
+ */
+ this.initialize = function() {
+ $('#address').text('For samplenaviConnection');
+
+ // event bind
+ $(document).bind('recvSeqNxt', function(event, data) {
+ recvSeqNxt(data);
+ });
+ $(document).bind('recvCarInfo', function(event, data) {
+ recvCarinfo(data);
+ });
+ // Initialize Location
+ _myLatLng = new google.maps.LatLng(_lat, _lng);
+
+ // MAP create
+ var mapOptions = {
+ zoom: DEFAULT_ZOOM, // zoom value
+ mapTypeId: google.maps.MapTypeId.ROADMAP, // MAP TYPE
+ center: _myLatLng // Initial Position
+ };
+
+ _map = new google.maps.Map($('#map_canvas').get(0), mapOptions);
+
+ // Create current position marker
+ _carMarker = new google.maps.Marker({
+ map: _map,
+ position: _myLatLng,
+ zIndex: 3
+ });
+
+ // Set DirectionRendererOption
+ var rendererOptions = {
+ draggable: false,
+ preserveViewport:true
+ };
+
+ _dirDisplay = new google.maps.DirectionsRenderer(rendererOptions);
+ _dirDisplay.setMap(_map);
+ _dirDisplay.setOptions( {suppressMarkers: true} ); // Hide markers
+ _dirService = new google.maps.DirectionsService();
+
+ // Create WebSocket Accessor(samplenavi)
+ _nativeAccessor = new NativeAppAccessor();
+ _nativeAccessor.connectWebSocket();
+
+ // Request CONF ONSCREEN
+ _seqnum = SEQUENCE_MODE.CONF;
+ }
+
+ /**
+ * finalize
+ *
+ */
+ this.finalize = function() {
+ _nativeAccessor.disconnectWebSocket();
+ }
+
+ /**
+ * Move Current Location
+ *
+ */
+ function changeLatLng() {
+ _myLatLng = new google.maps.LatLng(_lat, _lng);
+ _map.panTo(_myLatLng);
+
+ // Move Marker
+ _carMarker.setPosition(_myLatLng);
+ }
+
+ /**
+ * Set Route
+ */
+ function setRoute() {
+ if (SHOWING_ROUTE == 1) {
+ setRoute1();
+ } else if (SHOWING_ROUTE == 2) {
+ setRoute2();
+ } else if (SHOWING_ROUTE == 3) {
+ setRoute3();
+ }
+ }
+
+ /**
+ * Set Route(Route 1)
+ *
+ */
+ function setRoute1() {
+ // Local variable
+ var startStr = String(START_LAT) + ',' + String(START_LNG);
+ var goalStr = String(GOAL_LAT) + ',' + String(GOAL_LNG);
+
+ // Route request
+ var request = {
+ origin: startStr,
+ destination: goalStr,
+ waypoints: [
+ ],
+ travelMode: google.maps.DirectionsTravelMode.DRIVING, // Set DrivingMode(Car)
+ unitSystem: google.maps.DirectionsUnitSystem.METRIC, // Set Unit
+ optimizeWaypoints: true, // optimize route
+ avoidHighways: true, // Avoid highways
+ avoidTolls: true // Avoid tall road
+ };
+
+ _dirService.route(request, function(response, status) {
+ if (status == google.maps.DirectionsStatus.OK) {
+ _dirDisplay.setDirections(response);
+
+ _routeStr = "<route>";
+
+ // Set route info
+ for( var i = 0; i < (response.routes[0].overview_path.length); i++ ) {
+ var lat = response.routes[0].overview_path[i].lat();
+ var lng = response.routes[0].overview_path[i].lng();
+ _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
+ }
+ _routeStr += "</route>";
+
+ // Send route
+ _nativeAccessor.sendRoute( _routeStr );
+ }
+ else {
+ alert('google maps error:' + status);
+ }
+ })
+ }
+
+ /**
+ * Set Route(Route 2)
+ *
+ */
+ function setRoute2() {
+ // Route request
+ var request = {
+ origin: "35.47945,139.40026",
+ destination: "35.61689,139.44791",
+ waypoints: [
+ { location: "35.534845,139.437477" }
+ ],
+ travelMode: google.maps.DirectionsTravelMode.DRIVING, // Set DrivingMode(Car)
+ unitSystem: google.maps.DirectionsUnitSystem.METRIC, // Set Unit
+ optimizeWaypoints: false, // optimize route
+ avoidHighways: true, // Avoid highways
+ avoidTolls: true // Avoid tall road
+ };
+
+ _dirService.route(request, function(response, status) {
+ if (status == google.maps.DirectionsStatus.OK) {
+ _dirDisplay.setDirections(response);
+ _routeStr = "<route>";
+
+ // Set route info
+ for( var i = 0; i < (response[0].overview_path.length); i++ ) {
+ var lat = response[0].overview_path[i].lat();
+ var lng = response[0].overview_path[i].lng();
+ _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
+ }
+ _routeStr += "</route>";
+
+ // Send route
+ _nativeAccessor.sendRoute( _routeStr );
+ }
+ else {
+ alert('google maps error:' + status);
+ }
+ })
+ }
+
+ /**
+ * Set Route(Route 3)
+ *
+ */
+ function setRoute3() {
+ // Route request
+ var request = {
+ origin: "35.45153,139.2125",
+ destination: "35.43037,139.21579",
+ waypoints: [
+ ],
+ travelMode: google.maps.DirectionsTravelMode.DRIVING, // Set DrivingMode(Car)
+ unitSystem: google.maps.DirectionsUnitSystem.METRIC, // Set Unit
+ optimizeWaypoints: false, // optimize route
+ avoidHighways: true, // Avoid highways
+ avoidTolls: true // Avoid tall road
+ };
+
+ _dirService.route(request, function(response, status) {
+ if (status == google.maps.DirectionsStatus.OK) {
+ _dirDisplay.setDirections(response);
+ _routeStr = "<route>";
+
+ // Set root info
+ for( var i = 0; i < (response[0].overview_path.length); i++ ) {
+ var lat = response[0].overview_path[i].lat();
+ var lng = response[0].overview_path[i].lng();
+ _routeStr += String( lng ) + ',' + String( lat ) + "<BR>";
+ }
+ _routeStr += "</route>";
+
+ // Send route
+ _nativeAccessor.sendRoute( _routeStr );
+ }
+ else {
+ alert('google maps error:' + status);
+ }
+ })
+ }
+
+ /**
+ * Receive CarInfo
+ *
+ * @param data CarInfo data
+ *
+ */
+ function recvCarinfo(data) {
+ _lat = data.lat_val;
+ _lng = data.lon_val;
+ changeLatLng();
+ }
+
+ /**
+ * Receive Change Sequence
+ */
+ function recvSeqNxt(data) {
+ if (data == 'TOUCH ' + EDJE_PATH + EDJE_CONF_NAME + ' nai_01' ) {
+ _nativeAccessor.sendReqDistOnScreen();
+ _seqnum = SEQUENCE_MODE.DIST;
+ } else if (data == 'TOUCH ' + EDJE_PATH + EDJE_DIST_NAME + ' nai_12') {
+ _nativeAccessor.sendReqNaviStart();
+ _nativeAccessor.sendReqCloseOnScreen();
+ _seqnum = SEQUENCE_MODE.NAVI;
+
+ setRoute();
+ } else if (data == 'RESULT SUCCESS') {
+ $('#address').text("OnScreen Request Success.");
+ } else if (data == 'RESULT FAILED') {
+ $('#address').text("OnScreen Request Failed.");
+ }
+ }
+}
+
--- /dev/null
+/*\r
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.\r
+ *\r
+ * This program is licensed under the terms and conditions of the \r
+ * Apache License, version 2.0. The full text of the Apache License is at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ */\r
+\r
+/**\r
+ * Defines\r
+ */\r
+\r
+const MSG_TYPE = \r
+{\r
+ CHG : 0, // Change Message\r
+ SEQ : 1, // Sequence Message\r
+ ERR : 2, // Error Message\r
+ \r
+};\r
+\r
+const SEQUENCE_MODE = // Sequence\r
+{\r
+ START : 0, // Start Application\r
+ CONF : 1, // Display Conf.\r
+ DIST : 2, // Display Dist.\r
+ NAVI : 3, // Run Navigation\r
+ NAVI_END : 4 // End Navigation(no use)\r
+};\r
+\r
+const SHOWING_ROUTE = 1; // Current Route number\r
+const TMP_LAT = 35.47945; // Initialize Latitude\r
+const TMP_LON = 139.40026; // Initialize Longitude\r
+const DEFAULT_ZOOM = 17; // Zoom value for Map\r
+const EDJE_PATH = '/opt/apps/org.tizen.ico.app-samplenavi/data';\r
+const EDJE_CONF_NAME = '/samplenavi_conf.edj';\r
+const EDJE_DIST_NAME = '/samplenavi_conf_dist.edj';\r
+const APP_NO = '300';\r
+const IP_ADDR = '127.0.0.1';\r
+const WEBSOCKET_PORT = '50414';\r
+\r
+const KEY_LAT = "LAT";\r
+const KEY_LON = "LON";\r
+\r
--- /dev/null
+/*\r
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.\r
+ *\r
+ * This program is licensed under the terms and conditions of the \r
+ * Apache License, version 2.0. The full text of the Apache License is at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ */\r
+\r
+const START_LAT = 35.47945;\r
+const START_LNG = 139.40026;\r
+const GOAL_LAT = 35.49746;\r
+const GOAL_LNG = 139.40504;\r
--- /dev/null
+/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
+(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test("Â ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete
+t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
+(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- /dev/null
+/*! jQuery Mobile v1.0 jquerymobile.com | jquery.org/license */
+(function(a,e){if(a.cleanData){var b=a.cleanData;a.cleanData=function(f){for(var c=0,h;(h=f[c])!=null;c++)a(h).triggerHandler("remove");b(f)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return d.call(a(this),b,c)})}}a.widget=function(b,c,h){var d=b.split(".")[0],e,b=b.split(".")[1];e=d+"-"+b;if(!h)h=c,c=a.Widget;a.expr[":"][e]=function(c){return!!a.data(c,
+b)};a[d]=a[d]||{};a[d][b]=function(a,b){arguments.length&&this._createWidget(a,b)};c=new c;c.options=a.extend(true,{},c.options);a[d][b].prototype=a.extend(true,c,{namespace:d,widgetName:b,widgetEventPrefix:a[d][b].prototype.widgetEventPrefix||b,widgetBaseClass:e},h);a.widget.bridge(b,a[d][b])};a.widget.bridge=function(b,c){a.fn[b]=function(d){var g=typeof d==="string",i=Array.prototype.slice.call(arguments,1),k=this,d=!g&&i.length?a.extend.apply(null,[true,d].concat(i)):d;if(g&&d.charAt(0)==="_")return k;
+g?this.each(function(){var c=a.data(this,b);if(!c)throw"cannot call methods on "+b+" prior to initialization; attempted to call method '"+d+"'";if(!a.isFunction(c[d]))throw"no such method '"+d+"' for "+b+" widget instance";var g=c[d].apply(c,i);if(g!==c&&g!==e)return k=g,false}):this.each(function(){var e=a.data(this,b);e?e.option(d||{})._init():a.data(this,b,new c(d,this))});return k}};a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",
+options:{disabled:false},_createWidget:function(b,c){a.data(c,this.widgetName,this);this.element=a(c);this.options=a.extend(true,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){var b={};a.metadata&&(b=a.metadata.get(element)[this.widgetName]);return b},_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(b,c){var d=b;if(arguments.length===0)return a.extend({},this.options);if(typeof b==="string"){if(c===e)return this.options[b];d={};d[b]=c}this._setOptions(d);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b;a==="disabled"&&
+this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(b,c,d){var e=this.options[b],c=a.Event(c);c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase();d=d||{};if(c.originalEvent)for(var b=a.event.props.length,i;b;)i=a.event.props[--b],c[i]=c.originalEvent[i];this.element.trigger(c,
+d);return!(a.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+(function(a,e){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments);this._trigger("init")},_getCreateOptions:function(){var b=this.element,d={};a.each(this.options,function(a){var c=b.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));c!==e&&(d[a]=c)});return d},enhanceWithin:function(b){var d=a(b).closest(":jqmData(role='page')").data("page"),d=d&&d.keepNativeSelector()||"";a(this.options.initSelector,b).not(d)[this.widgetName]()}})})(jQuery);
+(function(a){a(window);var e=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'>"),f=a("<body>").append(d);return function(a){if(!(a in b)){var h=document.createElement("style"),g="@media "+a+" { #jquery-mediatest { position:absolute; } }";h.type="text/css";h.styleSheet?h.styleSheet.cssText=g:h.appendChild(document.createTextNode(g));e.prepend(f).prepend(h);b[a]=d.css("position")==="absolute";f.add(h).remove()}return b[a]}}()})(jQuery);
+(function(a,e){function b(a){var b=a.charAt(0).toUpperCase()+a.substr(1),a=(a+" "+c.join(b+" ")+b).split(" "),d;for(d in a)if(f[a[d]]!==e)return true}var d=a("<body>").prependTo("html"),f=d[0].style,c=["Webkit","Moz","O"],h="palmGetResource"in window,g=window.operamini&&{}.toString.call(window.operamini)==="[object OperaMini]",i=window.blackberry;a.mobile.browser={};a.mobile.browser.ie=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="<\!--[if gt IE "+ ++a+"]><br><![endif]--\>",
+c[0];);return a>4?a:!a}();a.extend(a.support,{orientation:"orientation"in window&&"onorientationchange"in window,touch:"ontouchend"in document,cssTransitions:"WebKitTransitionEvent"in window,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!b("content"),touchOverflow:!!b("overflowScrolling"),boxShadow:!!b("boxShadow")&&!i,scrollTop:("pageXOffset"in window||"scrollTop"in document.documentElement||"scrollTop"in d[0])&&!h&&!g,dynamicBaseTag:function(){var b=
+location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),f=null,e="",h;c.length?e=c.attr("href"):c=f=a("<base>",{href:b}).appendTo("head");h=a("<a href='testurl' />").prependTo(d)[0].href;c[0].href=e||location.pathname;f&&f.remove();return h.indexOf(b)===0}()});d.remove();h=function(){var a=window.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();
+a.mobile.ajaxBlacklist=window.blackberry&&!window.WebKitPoint||g||h;h&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")});a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")})(jQuery);
+(function(a,e,b,d){function f(a){for(;a&&typeof a.originalEvent!=="undefined";)a=a.originalEvent;return a}function c(b){for(var c={},f,d;b;){f=a.data(b,n);for(d in f)if(f[d])c[d]=c.hasVirtualBinding=true;b=b.parentNode}return c}function h(){v&&(clearTimeout(v),v=0);v=setTimeout(function(){E=v=0;u.length=0;D=false;y=true},a.vmouse.resetTimerDuration)}function g(b,c,r){var e,h;if(!(h=r&&r[b])){if(r=!r)a:{for(r=c.target;r;){if((h=a.data(r,n))&&(!b||h[b]))break a;r=r.parentNode}r=null}h=r}if(h){e=c;var r=
+e.type,j,g;e=a.Event(e);e.type=b;h=e.originalEvent;j=a.event.props;if(h)for(g=j.length;g;)b=j[--g],e[b]=h[b];if(r.search(/mouse(down|up)|click/)>-1&&!e.which)e.which=1;if(r.search(/^touch/)!==-1&&(b=f(h),r=b.touches,b=b.changedTouches,r=r&&r.length?r[0]:b&&b.length?b[0]:d))for(h=0,len=z.length;h<len;h++)b=z[h],e[b]=r[b];a(c.target).trigger(e)}return e}function i(b){var c=a.data(b.target,A);if(!D&&(!E||E!==c))if(c=g("v"+b.type,b))c.isDefaultPrevented()&&b.preventDefault(),c.isPropagationStopped()&&
+b.stopPropagation(),c.isImmediatePropagationStopped()&&b.stopImmediatePropagation()}function k(b){var d=f(b).touches,e;if(d&&d.length===1&&(e=b.target,d=c(e),d.hasVirtualBinding))E=r++,a.data(e,A,E),v&&(clearTimeout(v),v=0),w=y=false,e=f(b).touches[0],x=e.pageX,t=e.pageY,g("vmouseover",b,d),g("vmousedown",b,d)}function l(a){y||(w||g("vmousecancel",a,c(a.target)),w=true,h())}function o(b){if(!y){var d=f(b).touches[0],r=w,e=a.vmouse.moveDistanceThreshold;w=w||Math.abs(d.pageX-x)>e||Math.abs(d.pageY-
+t)>e;flags=c(b.target);w&&!r&&g("vmousecancel",b,flags);g("vmousemove",b,flags);h()}}function m(a){if(!y){y=true;var b=c(a.target),d;g("vmouseup",a,b);if(!w&&(d=g("vclick",a,b))&&d.isDefaultPrevented())d=f(a).changedTouches[0],u.push({touchID:E,x:d.clientX,y:d.clientY}),D=true;g("vmouseout",a,b);w=false;h()}}function p(b){var b=a.data(b,n),c;if(b)for(c in b)if(b[c])return true;return false}function j(){}function q(b){var c=b.substr(1);return{setup:function(){p(this)||a.data(this,n,{});a.data(this,
+n)[b]=true;s[b]=(s[b]||0)+1;s[b]===1&&B.bind(c,i);a(this).bind(c,j);if(C)s.touchstart=(s.touchstart||0)+1,s.touchstart===1&&B.bind("touchstart",k).bind("touchend",m).bind("touchmove",o).bind("scroll",l)},teardown:function(){--s[b];s[b]||B.unbind(c,i);C&&(--s.touchstart,s.touchstart||B.unbind("touchstart",k).unbind("touchmove",o).unbind("touchend",m).unbind("scroll",l));var d=a(this),f=a.data(this,n);f&&(f[b]=false);d.unbind(c,j);p(this)||d.removeData(n)}}}var n="virtualMouseBindings",A="virtualTouchID",
+e="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),z="clientX clientY pageX pageY screenX screenY".split(" "),s={},v=0,x=0,t=0,w=false,u=[],D=false,y=false,C="addEventListener"in b,B=a(b),r=1,E=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var F=0;F<e.length;F++)a.event.special[e[F]]=q(e[F]);C&&b.addEventListener("click",function(b){var c=u.length,d=b.target,f,r,e,h,j;if(c){f=b.clientX;r=b.clientY;threshold=a.vmouse.clickDistanceThreshold;
+for(e=d;e;){for(h=0;h<c;h++)if(j=u[h],e===d&&Math.abs(j.x-f)<threshold&&Math.abs(j.y-r)<threshold||a.data(e,A)===j.touchID){b.preventDefault();b.stopPropagation();return}e=e.parentNode}}},true)})(jQuery,window,document);
+(function(a,e,b){function d(b,c,d){var f=d.type;d.type=c;a.event.handle.call(b,d);d.type=f}a.each("touchstart touchmove touchend orientationchange throttledresize tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)};a.attrFn[c]=true});var f=a.support.touch,c=f?"touchstart":"mousedown",h=f?"touchend":"mouseup",g=f?"touchmove":"mousemove";a.event.special.scrollstart={enabled:true,setup:function(){function b(a,
+e){f=e;d(c,f?"scrollstart":"scrollstop",a)}var c=this,f,e;a(c).bind("touchmove scroll",function(c){a.event.special.scrollstart.enabled&&(f||b(c,true),clearTimeout(e),e=setTimeout(function(){b(c,false)},50))})}};a.event.special.tap={setup:function(){var b=this,c=a(b);c.bind("vmousedown",function(f){function e(){clearTimeout(q)}function h(){e();c.unbind("vclick",g).unbind("vmouseup",e).unbind("vmousecancel",h)}function g(a){h();j==a.target&&d(b,"tap",a)}if(f.which&&f.which!==1)return false;var j=f.target,
+q;c.bind("vmousecancel",h).bind("vmouseup",e).bind("vclick",g);q=setTimeout(function(){d(b,"taphold",a.Event("taphold"))},750)})}};a.event.special.swipe={scrollSupressionThreshold:10,durationThreshold:1E3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var d=a(this);d.bind(c,function(c){function f(b){if(m){var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;p={time:(new Date).getTime(),coords:[c.pageX,c.pageY]};Math.abs(m.coords[0]-p.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&
+b.preventDefault()}}var e=c.originalEvent.touches?c.originalEvent.touches[0]:c,m={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(c.target)},p;d.bind(g,f).one(h,function(){d.unbind(g,f);m&&p&&p.time-m.time<a.event.special.swipe.durationThreshold&&Math.abs(m.coords[0]-p.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(m.coords[1]-p.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&m.origin.trigger("swipe").trigger(m.coords[0]>p.coords[0]?"swipeleft":"swiperight");
+m=p=b})})}};(function(a,b){function c(){var a=f();a!==e&&(e=a,d.trigger("orientationchange"))}var d=a(b),f,e;a.event.special.orientationchange={setup:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;e=f();d.bind("throttledresize",c)},teardown:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;d.unbind("throttledresize",c)},add:function(a){var b=a.handler;a.handler=function(a){a.orientation=f();return b.apply(this,arguments)}}};a.event.special.orientationchange.orientation=
+f=function(){var c=true,c=document.documentElement;return(c=a.support.orientation?b.orientation%180==0:c&&c.clientWidth/c.clientHeight<1.1)?"portrait":"landscape"}})(jQuery,e);(function(){a.event.special.throttledresize={setup:function(){a(this).bind("resize",b)},teardown:function(){a(this).unbind("resize",b)}};var b=function(){f=(new Date).getTime();e=f-c;e>=250?(c=f,a(this).trigger("throttledresize")):(d&&clearTimeout(d),d=setTimeout(b,250-e))},c=0,d,f,e})();a.each({scrollstop:"scrollstart",taphold:"tap",
+swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})})(jQuery,this);
+(function(a,e,b){function d(a){a=a||location.href;return"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var f="hashchange",c=document,h,g=a.event.special,i=c.documentMode,k="on"+f in e&&(i===b||i>7);a.fn[f]=function(a){return a?this.bind(f,a):this.trigger(f)};a.fn[f].delay=50;g[f]=a.extend(g[f],{setup:function(){if(k)return false;a(h.start)},teardown:function(){if(k)return false;a(h.stop)}});h=function(){function h(){var b=d(),c=n(p);if(b!==p)q(p=b,c),a(e).trigger(f);else if(c!==p)location.href=location.href.replace(/#.*/,
+"")+c;i=setTimeout(h,a.fn[f].delay)}var g={},i,p=d(),j=function(a){return a},q=j,n=j;g.start=function(){i||h()};g.stop=function(){i&&clearTimeout(i);i=b};a.browser.msie&&!k&&function(){var b,e;g.start=function(){if(!b)e=(e=a.fn[f].src)&&e+d(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){e||q(d());h()}).attr("src",e||"javascript:0").insertAfter("body")[0].contentWindow,c.onpropertychange=function(){try{if(event.propertyName==="title")b.document.title=c.title}catch(a){}}};
+g.stop=j;n=function(){return d(b.location.href)};q=function(d,e){var h=b.document,g=a.fn[f].domain;if(d!==e)h.title=c.title,h.open(),g&&h.write('<script>document.domain="'+g+'"<\/script>'),h.close(),b.location.hash=d}}();return g}()})(jQuery,this);
+(function(a){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:false,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){this._trigger("beforecreate");this.element.attr("tabindex","0").addClass("ui-page ui-body-"+this.options.theme)},keepNativeSelector:function(){var e=this.options;return e.keepNative&&a.trim(e.keepNative)&&e.keepNative!==e.keepNativeDefault?[e.keepNative,e.keepNativeDefault].join(", "):e.keepNativeDefault}})})(jQuery);
+(function(a,e){var b={};a.extend(a.mobile,{ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",ajaxEnabled:true,hashListeningEnabled:true,linkBindingEnabled:true,defaultPageTransition:"slide",minScrollBack:250,defaultDialogTransition:"pop",loadingMessage:"loading",pageLoadErrorMessage:"Error Loading Page",autoInitializePage:true,pushStateEnabled:true,orientationChangeEnabled:true,gradeA:function(){return a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=
+7},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},silentScroll:function(b){if(a.type(b)!=="number")b=a.mobile.defaultHomeScroll;a.event.special.scrollstart.enabled=false;
+setTimeout(function(){e.scrollTo(0,b);a(document).trigger("silentscroll",{x:0,y:b})},20);setTimeout(function(){a.event.special.scrollstart.enabled=true},150)},nsNormalizeDict:b,nsNormalize:function(c){return!c?void 0:b[c]||(b[c]=a.camelCase(a.mobile.ns+c))},getInheritedTheme:function(a,b){for(var d=a[0],f="",e=/ui-(bar|body)-([a-z])\b/,l,o;d;){l=d.className||"";if((o=e.exec(l))&&(f=o[2]))break;d=d.parentNode}return f||b||"a"}});a.fn.jqmData=function(b,d){var f;typeof b!="undefined"&&(f=this.data(b?
+a.mobile.nsNormalize(b):b,d));return f};a.jqmData=function(b,d,f){var e;typeof d!="undefined"&&(e=a.data(b,d?a.mobile.nsNormalize(d):d,f));return e};a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))};a.jqmRemoveData=function(b,d){return a.removeData(b,a.mobile.nsNormalize(d))};a.fn.removeWithDependents=function(){a.removeWithDependents(this)};a.removeWithDependents=function(b){b=a(b);(b.jqmData("dependents")||a()).remove();b.remove()};a.fn.addDependents=function(b){a.addDependents(a(this),
+b)};a.addDependents=function(b,d){var f=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(f,d))};a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()};var d=a.find,f=/:jqmData\(([^)]*)\)/g;a.find=function(b,e,g,i){b=b.replace(f,"[data-"+(a.mobile.ns||"")+"$1]");return d.call(this,b,e,g,i)};a.extend(a.find,d);a.find.matches=function(b,d){return a.find(b,null,null,d)};a.find.matchesSelector=function(b,d){return a.find(d,null,null,[b]).length>0}})(jQuery,this);
+(function(a,e){function b(a){var b=a.find(".ui-title:eq(0)");b.length?b.focus():a.focus()}function d(b){q&&(!q.closest(".ui-page-active").length||b)&&q.removeClass(a.mobile.activeBtnClass);q=null}function f(){z=false;A.length>0&&a.mobile.changePage.apply(null,A.pop())}function c(c,d,f,e){var g=a.mobile.urlHistory.getActive(),j=a.support.touchOverflow&&a.mobile.touchOverflowEnabled,i=g.lastScroll||(j?0:a.mobile.defaultHomeScroll),g=h();window.scrollTo(0,a.mobile.defaultHomeScroll);d&&d.data("page")._trigger("beforehide",
+null,{nextPage:c});j||c.height(g+i);c.data("page")._trigger("beforeshow",null,{prevPage:d||a("")});a.mobile.hidePageLoadingMsg();j&&i&&(c.addClass("ui-mobile-pre-transition"),b(c),c.is(".ui-native-fixed")?c.find(".ui-content").scrollTop(i):c.scrollTop(i));f=(a.mobile.transitionHandlers[f||"none"]||a.mobile.defaultTransitionHandler)(f,e,c,d);f.done(function(){j||(c.height(""),b(c));j||a.mobile.silentScroll(i);d&&(j||d.height(""),d.data("page")._trigger("hide",null,{nextPage:c}));c.data("page")._trigger("show",
+null,{prevPage:d||a("")})});return f}function h(){var b=a.event.special.orientationchange.orientation()==="portrait",c=b?screen.availHeight:screen.availWidth,b=Math.max(b?480:320,a(window).height());return Math.min(c,b)}function g(){(!a.support.touchOverflow||!a.mobile.touchOverflowEnabled)&&a("."+a.mobile.activePageClass).css("min-height",h())}function i(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c);b.page()}function k(a){for(;a;){if(typeof a.nodeName==="string"&&a.nodeName.toLowerCase()=="a")break;
+a=a.parentNode}return a}function l(b){var b=a(b).closest(".ui-page").jqmData("url"),c=t.hrefNoHash;if(!b||!j.isPath(b))b=c;return j.makeUrlAbsolute(b,c)}var o=a(window),m=a("html"),p=a("head"),j={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,parseUrl:function(b){if(a.type(b)==="object")return b;b=j.urlParseRE.exec(b||"")||[];return{href:b[0]||"",hrefNoHash:b[1]||
+"",hrefNoSearch:b[2]||"",domain:b[3]||"",protocol:b[4]||"",doubleSlash:b[5]||"",authority:b[6]||"",username:b[8]||"",password:b[9]||"",host:b[10]||"",hostname:b[11]||"",port:b[12]||"",pathname:b[13]||"",directory:b[14]||"",filename:b[15]||"",search:b[16]||"",hash:b[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;for(var a=a||"",c=(b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"")?b.split("/"):[],d=a.split("/"),f=0;f<d.length;f++){var e=d[f];switch(e){case ".":break;case "..":c.length&&
+c.pop();break;default:c.push(e)}}return"/"+c.join("/")},isSameDomain:function(a,b){return j.parseUrl(a).domain===j.parseUrl(b).domain},isRelativeUrl:function(a){return j.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return j.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!j.isRelativeUrl(a))return a;var c=j.parseUrl(a),d=j.parseUrl(b),f=c.protocol||d.protocol,e=c.protocol?c.doubleSlash:c.doubleSlash||d.doubleSlash,h=c.authority||d.authority,g=c.pathname!=="",i=j.makePathAbsolute(c.pathname||
+d.filename,d.pathname);return f+e+h+i+(c.search||!g&&d.search||"")+c.hash},addSearchParams:function(b,c){var d=j.parseUrl(b),f=typeof c==="object"?a.param(c):c,e=d.search||"?";return d.hrefNoSearch+e+(e.charAt(e.length-1)!=="?"?"&":"")+f+(d.hash||"")},convertUrlToDataUrl:function(a){var b=j.parseUrl(a);if(j.isEmbeddedPage(b))return b.hash.split(s)[0].replace(/^#/,"");else if(j.isSameDomain(b,t))return b.hrefNoHash.replace(t.domain,"");return a},get:function(a){if(a===e)a=location.hash;return j.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,
+"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(s)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(t.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return j.stripHash(a.replace(/\?.*$/,"").replace(s,""))},isExternal:function(a){a=j.parseUrl(a);return a.protocol&&a.domain!==x.domain?true:false},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var b=
+j.parseUrl(j.makeUrlAbsolute(b,t)),c=a.mobile.firstPage,c=c&&c[0]?c[0].id:e;return(b.hrefNoHash===x.hrefNoHash||w&&b.hrefNoHash===t.hrefNoHash)&&(!b.hash||b.hash==="#"||c&&b.hash.replace(/^#/,"")===c)},isEmbeddedPage:function(a){a=j.parseUrl(a);return a.protocol!==""?a.hash&&(a.hrefNoHash===x.hrefNoHash||w&&a.hrefNoHash===t.hrefNoHash):/^#/.test(a.href)}},q=null,n={stack:[],activeIndex:0,getActive:function(){return n.stack[n.activeIndex]},getPrev:function(){return n.stack[n.activeIndex-1]},getNext:function(){return n.stack[n.activeIndex+
+1]},addNew:function(a,b,c,d,f){n.getNext()&&n.clearForward();n.stack.push({url:a,transition:b,title:c,pageUrl:d,role:f});n.activeIndex=n.stack.length-1},clearForward:function(){n.stack=n.stack.slice(0,n.activeIndex+1)},directHashChange:function(b){var c,d,f;this.getActive();a.each(n.stack,function(a,e){b.currentUrl===e.url&&(c=a<n.activeIndex,d=!c,f=a)});this.activeIndex=f!==e?f:this.activeIndex;c?(b.either||b.isBack)(true):d&&(b.either||b.isForward)(false)},ignoreNextHashChange:false},A=[],z=false,
+s="&ui-state=dialog",v=p.children("base"),x=j.parseUrl(location.href),t=v.length?j.parseUrl(j.makeUrlAbsolute(v.attr("href"),x.href)):x,w=x.hrefNoHash!==t.hrefNoHash,u=a.support.dynamicBaseTag?{element:v.length?v:a("<base>",{href:t.hrefNoHash}).prependTo(p),set:function(a){u.element.attr("href",j.makeUrlAbsolute(a,t))},reset:function(){u.element.attr("href",t.hrefNoHash)}}:e,D=true,y,C,B;y=function(){var b=o;a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&(b=a(".ui-page-active"),b=b.is(".ui-native-fixed")?
+b.find(".ui-content"):b);return b};C=function(b){if(D){var c=a.mobile.urlHistory.getActive();if(c)b=b&&b.scrollTop(),c.lastScroll=b<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:b}};B=function(){setTimeout(C,100,a(this))};o.bind(a.support.pushState?"popstate":"hashchange",function(){D=false});o.one(a.support.pushState?"popstate":"hashchange",function(){D=true});o.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){var a=y();D=true;a.unbind("scrollstop",B);
+a.bind("scrollstop",B)})});y().bind("scrollstop",B);a.mobile.getScreenHeight=h;a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd",b):(setTimeout(b,0),a(this))};a.mobile.path=j;a.mobile.base=u;a.mobile.urlHistory=n;a.mobile.dialogHashKey=s;a.mobile.noneTransitionHandler=function(b,c,d,f){f&&f.removeClass(a.mobile.activePageClass);d.addClass(a.mobile.activePageClass);return a.Deferred().resolve(b,c,d,f).promise()};a.mobile.defaultTransitionHandler=a.mobile.noneTransitionHandler;
+a.mobile.transitionHandlers={none:a.mobile.defaultTransitionHandler};a.mobile.allowCrossDomainPages=false;a.mobile.getDocumentUrl=function(b){return b?a.extend({},x):x.href};a.mobile.getDocumentBase=function(b){return b?a.extend({},t):t.href};a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c);c.isDefaultPrevented()||b.removeWithDependents()})};
+a.mobile.loadPage=function(b,c){var d=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),h=null,g=null,m=j.makeUrlAbsolute(b,a.mobile.activePage&&l(a.mobile.activePage)||t.hrefNoHash);if(f.data&&f.type==="get")m=j.addSearchParams(m,f.data),f.data=e;if(f.data&&f.type==="post")f.reloadPage=true;var s=j.getFilePath(m),p=j.convertUrlToDataUrl(m);f.pageContainer=f.pageContainer||a.mobile.pageContainer;h=f.pageContainer.children(":jqmData(url='"+p+"')");h.length===0&&p&&!j.isPath(p)&&(h=f.pageContainer.children("#"+
+p).attr("data-"+a.mobile.ns+"url",p));if(h.length===0)if(a.mobile.firstPage&&j.isFirstPageUrl(s))a.mobile.firstPage.parent().length&&(h=a(a.mobile.firstPage));else if(j.isEmbeddedPage(s))return d.reject(m,c),d.promise();u&&u.reset();if(h.length){if(!f.reloadPage)return i(h,f.role),d.resolve(m,c,h),d.promise();g=h}var n=f.pageContainer,k=new a.Event("pagebeforeload"),q={url:b,absUrl:m,dataUrl:p,deferred:d,options:f};n.trigger(k,q);if(k.isDefaultPrevented())return d.promise();if(f.showLoadMsg)var v=
+setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay);!a.mobile.allowCrossDomainPages&&!j.isSameDomain(x,m)?d.reject(m,c):a.ajax({url:s,type:f.type,data:f.data,dataType:"html",success:function(e,n,k){var o=a("<div></div>"),l=e.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,t=RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)").test(e)&&RegExp.$1&&t.test(RegExp.$1)&&RegExp.$1&&(b=s=j.getFilePath(RegExp.$1));u&&u.set(s);
+o.get(0).innerHTML=e;h=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first();h.length||(h=a("<div data-"+a.mobile.ns+"role='page'>"+e.split(/<\/?body[^>]*>/gmi)[1]+"</div>"));l&&!h.jqmData("title")&&(~l.indexOf("&")&&(l=a("<div>"+l+"</div>").text()),h.jqmData("title",l));if(!a.support.dynamicBaseTag){var x=j.get(s);h.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b),
+c=c.replace(location.protocol+"//"+location.host+location.pathname,"");/^(\w+:|#|\/)/.test(c)||a(this).attr(b,x+c)})}h.attr("data-"+a.mobile.ns+"url",j.convertUrlToDataUrl(s)).attr("data-"+a.mobile.ns+"external-page",true).appendTo(f.pageContainer);h.one("pagecreate",a.mobile._bindPageRemove);i(h,f.role);m.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(h=f.pageContainer.children(":jqmData(url='"+p+"')"));f.showLoadMsg&&(clearTimeout(v),a.mobile.hidePageLoadingMsg());q.xhr=k;q.textStatus=n;q.page=h;f.pageContainer.trigger("pageload",
+q);d.resolve(m,c,h,g)},error:function(b,e,h){u&&u.set(j.get());q.xhr=b;q.textStatus=e;q.errorThrown=h;b=new a.Event("pageloadfailed");f.pageContainer.trigger(b,q);b.isDefaultPrevented()||(f.showLoadMsg&&(clearTimeout(v),a.mobile.hidePageLoadingMsg(),a("<div class='ui-loader ui-overlay-shadow ui-body-e ui-corner-all'><h1>"+a.mobile.pageLoadErrorMessage+"</h1></div>").css({display:"block",opacity:0.96,top:o.scrollTop()+100}).appendTo(f.pageContainer).delay(800).fadeOut(400,function(){a(this).remove()})),
+d.reject(m,c))}});return d.promise()};a.mobile.loadPage.defaults={type:"get",data:e,reloadPage:false,role:e,showLoadMsg:false,pageContainer:e,loadMsgDelay:50};a.mobile.changePage=function(b,h){if(z)A.unshift(arguments);else{var g=a.extend({},a.mobile.changePage.defaults,h);g.pageContainer=g.pageContainer||a.mobile.pageContainer;g.fromPage=g.fromPage||a.mobile.activePage;var p=g.pageContainer,k=new a.Event("pagebeforechange"),q={toPage:b,options:g};p.trigger(k,q);if(!k.isDefaultPrevented())if(b=q.toPage,
+z=true,typeof b=="string")a.mobile.loadPage(b,g).done(function(b,c,d,f){z=false;c.duplicateCachedPage=f;a.mobile.changePage(d,c)}).fail(function(){z=false;d(true);f();g.pageContainer.trigger("pagechangefailed",q)});else{if(b[0]===a.mobile.firstPage[0]&&!g.dataUrl)g.dataUrl=x.hrefNoHash;var k=g.fromPage,l=g.dataUrl&&j.convertUrlToDataUrl(g.dataUrl)||b.jqmData("url"),v=l;j.getFilePath(l);var o=n.getActive(),t=n.activeIndex===0,w=0,u=document.title,y=g.role==="dialog"||b.jqmData("role")==="dialog";if(k&&
+k[0]===b[0]&&!g.allowSamePageTransition)z=false,p.trigger("pagechange",q);else{i(b,g.role);g.fromHashChange&&n.directHashChange({currentUrl:l,isBack:function(){w=-1},isForward:function(){w=1}});try{document.activeElement&&document.activeElement.nodeName.toLowerCase()!="body"?a(document.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(B){}y&&o&&(l=(o.url||"")+s);if(g.changeHash!==false&&l)n.ignoreNextHashChange=true,j.set(l);var C=!o?u:b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText();
+C&&u==document.title&&(u=C);b.jqmData("title")||b.jqmData("title",u);g.transition=g.transition||(w&&!t?o.transition:e)||(y?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition);w||n.addNew(l,g.transition,u,v,g.role);document.title=n.getActive().title;a.mobile.activePage=b;g.reverse=g.reverse||w<0;c(b,k,g.transition,g.reverse).done(function(){d();g.duplicateCachedPage&&g.duplicateCachedPage.remove();m.removeClass("ui-mobile-rendering");f();p.trigger("pagechange",q)})}}}};a.mobile.changePage.defaults=
+{transition:e,reverse:false,changeHash:true,fromHashChange:false,role:e,duplicateCachedPage:e,pageContainer:e,showLoadMsg:true,dataUrl:e,fromPage:e,allowSamePageTransition:false};a.mobile._registerInternalEvents=function(){a("form").live("submit",function(b){var c=a(this);if(a.mobile.ajaxEnabled&&!c.is(":jqmData(ajax='false')")){var d=c.attr("method"),f=c.attr("target"),e=c.attr("action");if(!e&&(e=l(c),e===t.hrefNoHash))e=x.hrefNoSearch;e=j.makeUrlAbsolute(e,l(c));!j.isExternal(e)&&!f&&(a.mobile.changePage(e,
+{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),direction:c.jqmData("direction"),reloadPage:true}),b.preventDefault())}});a(document).bind("vclick",function(b){if(!(b.which>1)&&a.mobile.linkBindingEnabled&&(b=k(b.target))&&j.parseUrl(b.getAttribute("href")||"#").hash!=="#")d(true),q=a(b).closest(".ui-btn").not(".ui-disabled"),q.addClass(a.mobile.activeBtnClass),a("."+a.mobile.activePageClass+" .ui-btn").not(b).blur()});a(document).bind("click",function(b){if(a.mobile.linkBindingEnabled){var c=
+k(b.target);if(c&&!(b.which>1)){var f=a(c),h=function(){window.setTimeout(function(){d(true)},200)};if(f.is(":jqmData(rel='back')"))return window.history.back(),false;var g=l(f),c=j.makeUrlAbsolute(f.attr("href")||"#",g);if(!a.mobile.ajaxEnabled&&!j.isEmbeddedPage(c))h();else{if(c.search("#")!=-1)if(c=c.replace(/[^#]*#/,""))c=j.isPath(c)?j.makeUrlAbsolute(c,g):j.makeUrlAbsolute("#"+c,x.hrefNoHash);else{b.preventDefault();return}var g=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),
+i=a.mobile.allowCrossDomainPages&&x.protocol==="file:"&&c.search(/^https?:/)!=-1;g||j.isExternal(c)&&!i?h():(h=f.jqmData("transition"),g=(g=f.jqmData("direction"))&&g==="reverse"||f.jqmData("back"),f=f.attr("data-"+a.mobile.ns+"rel")||e,a.mobile.changePage(c,{transition:h,reverse:g,role:f}),b.preventDefault())}}}});a(".ui-page").live("pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),f=c.attr("href");f&&a.inArray(f,b)===-1&&(b.push(f),a.mobile.loadPage(f,
+{role:c.attr("data-"+a.mobile.ns+"rel")}))})});a.mobile._handleHashChange=function(b){var c=j.stripHash(b),f={transition:a.mobile.urlHistory.stack.length===0?"none":e,changeHash:false,fromHashChange:true};if(!a.mobile.hashListeningEnabled||n.ignoreNextHashChange)n.ignoreNextHashChange=false;else{if(n.stack.length>1&&c.indexOf(s)>-1)if(a.mobile.activePage.is(".ui-dialog"))n.directHashChange({currentUrl:c,either:function(b){var d=a.mobile.urlHistory.getActive();c=d.pageUrl;a.extend(f,{role:d.role,transition:d.transition,
+reverse:b})}});else{n.directHashChange({currentUrl:c,isBack:function(){window.history.back()},isForward:function(){window.history.forward()}});return}c?(c=typeof c==="string"&&!j.isPath(c)?j.makeUrlAbsolute("#"+c,t):c,a.mobile.changePage(c,f)):a.mobile.changePage(a.mobile.firstPage,f)}};o.bind("hashchange",function(){a.mobile._handleHashChange(location.hash)});a(document).bind("pageshow",g);a(window).bind("throttledresize",g)}})(jQuery);
+(function(a,e){var b={},d=a(e),f=a.mobile.path.parseUrl(location.href);a.extend(b,{initialFilePath:f.pathname+f.search,initialHref:f.hrefNoHash,hashchangeFired:false,state:function(){return{hash:location.hash||"#"+b.initialFilePath,title:document.title,initialHref:b.initialHref}},resetUIKeys:function(b){var f="&"+a.mobile.subPageUrlKey,d=b.indexOf(a.mobile.dialogHashKey);d>-1?b=b.slice(0,d)+"#"+b.slice(d):b.indexOf(f)>-1&&(b=b.split(f).join("#"+f));return b},nextHashChangePrevented:function(c){a.mobile.urlHistory.ignoreNextHashChange=
+c;b.onHashChangeDisabled=c},onHashChange:function(){if(!b.onHashChangeDisabled){var c,f;c=location.hash;var d=a.mobile.path.isPath(c),e=d?location.href:a.mobile.getDocumentUrl();c=d?c.replace("#",""):c;f=b.state();c=a.mobile.path.makeUrlAbsolute(c,e);d&&(c=b.resetUIKeys(c));history.replaceState(f,document.title,c)}},onPopState:function(c){var f=c.originalEvent.state;f&&(b.nextHashChangePrevented(true),setTimeout(function(){b.nextHashChangePrevented(false);a.mobile._handleHashChange(f.hash)},100))},
+init:function(){d.bind("hashchange",b.onHashChange);d.bind("popstate",b.onPopState);location.hash===""&&history.replaceState(b.state(),document.title,location.href)}});a(function(){a.mobile.pushStateEnabled&&a.support.pushState&&b.init()})})(jQuery,this);
+(function(a){function e(b,d,f,c){var e=new a.Deferred,g=d?" reverse":"",i="ui-mobile-viewport-transitioning viewport-"+b;f.animationComplete(function(){f.add(c).removeClass("out in reverse "+b);c&&c[0]!==f[0]&&c.removeClass(a.mobile.activePageClass);f.parent().removeClass(i);e.resolve(b,d,f,c)});f.parent().addClass(i);c&&c.addClass(b+" out"+g);f.addClass(a.mobile.activePageClass+" "+b+" in"+g);return e.promise()}a.mobile.css3TransitionHandler=e;if(a.mobile.defaultTransitionHandler===a.mobile.noneTransitionHandler)a.mobile.defaultTransitionHandler=
+e})(jQuery,this);
+(function(a){a.mobile.page.prototype.options.degradeInputs={color:false,date:false,datetime:false,"datetime-local":false,email:false,month:false,number:false,range:"number",search:"text",tel:false,time:false,url:false,week:false};a(document).bind("pagecreate create",function(e){var b=a(e.target).closest(':jqmData(role="page")').data("page"),d;if(b)d=b.options,a(e.target).find("input").not(b.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";
+if(d.degradeInputs[c]){var g=a("<div>").html(b.clone()).html(),i=g.indexOf(" type=")>-1;b.replaceWith(g.replace(i?/\s+type=["']?\w+['"]?/:/\/?>/,' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(i?"":">")))}})})})(jQuery);
+(function(a,e){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,d=this.element,f=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>");d.addClass("ui-overlay-"+this.options.overlayTheme);d.attr("role","dialog").addClass("ui-dialog").find(":jqmData(role='header')").addClass("ui-corner-top ui-overlay-shadow").prepend(f).end().find(":jqmData(role='content'),:jqmData(role='footer')").addClass("ui-overlay-shadow").last().addClass("ui-corner-bottom");
+f.bind("vclick",function(){b.close()});d.bind("vclick submit",function(b){var b=a(b.target).closest(b.type==="vclick"?"a":"form"),f;b.length&&!b.jqmData("transition")&&(f=a.mobile.urlHistory.getActive()||{},b.attr("data-"+a.mobile.ns+"transition",f.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(){a(this).find("."+a.mobile.activeBtnClass).removeClass(a.mobile.activeBtnClass)})},close:function(){e.history.back()}});a(a.mobile.dialog.prototype.options.initSelector).live("pagecreate",
+function(){a(this).dialog()})})(jQuery,this);
+(function(a){a.mobile.page.prototype.options.backBtnText="Back";a.mobile.page.prototype.options.addBackBtn=false;a.mobile.page.prototype.options.backBtnTheme=null;a.mobile.page.prototype.options.headerTheme="a";a.mobile.page.prototype.options.footerTheme="a";a.mobile.page.prototype.options.contentTheme=null;a(":jqmData(role='page'), :jqmData(role='dialog')").live("pagecreate",function(){var e=a(this),b=e.data("page").options,d=e.jqmData("role"),f=b.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",
+this).each(function(){var c=a(this),e=c.jqmData("role"),g=c.jqmData("theme"),i=g||b.contentTheme||d==="dialog"&&f,k;c.addClass("ui-"+e);if(e==="header"||e==="footer"){var l=g||(e==="header"?b.headerTheme:b.footerTheme)||f;c.addClass("ui-bar-"+l).attr("role",e==="header"?"banner":"contentinfo");g=c.children("a");i=g.hasClass("ui-btn-left");k=g.hasClass("ui-btn-right");i=i||g.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length;k||g.eq(1).addClass("ui-btn-right");b.addBackBtn&&e==="header"&&a(".ui-page").length>
+1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!i&&a("<a href='#' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+b.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",b.backBtnTheme||l).prependTo(c);c.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({tabindex:"0",role:"heading","aria-level":"1"})}else e==="content"&&(i&&c.addClass("ui-body-"+i),c.attr("role","main"))})})})(jQuery);
+(function(a){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:true,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,iconTheme:"d",initSelector:":jqmData(role='collapsible')"},_create:function(){var e=this.element,b=this.options,d=e.addClass("ui-collapsible"),f=e.children(b.heading).first(),c=d.wrapInner("<div class='ui-collapsible-content'></div>").find(".ui-collapsible-content"),
+h=e.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set"),e=h.children(":jqmData(role='collapsible')");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove());if(h.length){if(!b.theme)b.theme=h.jqmData("theme");if(!b.contentTheme)b.contentTheme=h.jqmData("content-theme")}c.addClass(b.contentTheme?"ui-body-"+b.contentTheme:"");f.insertBefore(c).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:false,
+corners:false,iconPos:"left",icon:"plus",theme:b.theme});h.length?(h.jqmData("collapsiblebound")||h.jqmData("collapsiblebound",true).bind("expand",function(b){a(b.target).closest(".ui-collapsible").siblings(".ui-collapsible").trigger("collapse")}),e.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),e.last().jqmData("collapsible-last",true).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"),d.jqmData("collapsible-last")&&
+f.find("a").first().add(f.find(".ui-btn-inner")).addClass("ui-corner-bottom")):f.find("a").first().add(f.find(".ui-btn-inner")).addClass("ui-corner-top ui-corner-bottom");d.bind("expand collapse",function(e){if(!e.isDefaultPrevented()){e.preventDefault();var i=a(this),e=e.type==="collapse",k=b.contentTheme;f.toggleClass("ui-collapsible-heading-collapsed",e).find(".ui-collapsible-heading-status").text(e?b.expandCueText:b.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-minus",!e).toggleClass("ui-icon-plus",
+e);i.toggleClass("ui-collapsible-collapsed",e);c.toggleClass("ui-collapsible-content-collapsed",e).attr("aria-hidden",e);if(k&&(!h.length||d.jqmData("collapsible-last")))f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",e),c.toggleClass("ui-corner-bottom",!e);c.trigger("updatelayout")}}).trigger(b.collapsed?"collapse":"expand");f.bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";d.trigger(b);a.preventDefault()})}});a(document).bind("pagecreate create",
+function(e){a(a.mobile.collapsible.prototype.options.initSelector,e.target).collapsible()})})(jQuery);(function(a){a.fn.fieldcontain=function(){return this.addClass("ui-field-contain ui-body ui-br")};a(document).bind("pagecreate create",function(e){a(":jqmData(role='fieldcontain')",e.target).fieldcontain()})})(jQuery);
+(function(a){a.fn.grid=function(e){return this.each(function(){var b=a(this),d=a.extend({grid:null},e),f=b.children(),c={solo:1,a:2,b:3,c:4,d:5},d=d.grid;if(!d)if(f.length<=5)for(var h in c)c[h]===f.length&&(d=h);else d="a";c=c[d];b.addClass("ui-grid-"+d);f.filter(":nth-child("+c+"n+1)").addClass("ui-block-a");c>1&&f.filter(":nth-child("+c+"n+2)").addClass("ui-block-b");c>2&&f.filter(":nth-child(3n+3)").addClass("ui-block-c");c>3&&f.filter(":nth-child(4n+4)").addClass("ui-block-d");c>4&&f.filter(":nth-child(5n+5)").addClass("ui-block-e")})}})(jQuery);
+(function(a,e){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var b=this.element,d=b.find("a"),f=d.filter(":jqmData(icon)").length?this.options.iconpos:e;b.addClass("ui-navbar").attr("role","navigation").find("ul").grid({grid:this.options.grid});f||b.addClass("ui-navbar-noicons");d.buttonMarkup({corners:false,shadow:false,iconpos:f});b.delegate("a","vclick",function(){d.not(".ui-state-persist").removeClass(a.mobile.activeBtnClass);
+a(this).addClass(a.mobile.activeBtnClass)})}});a(document).bind("pagecreate create",function(b){a(a.mobile.navbar.prototype.options.initSelector,b.target).navbar()})})(jQuery);
+(function(a){var e={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:false,initSelector:":jqmData(role='listview')"},_create:function(){var a=this;a.element.addClass(function(d,f){return f+" ui-listview "+(a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"")});a.refresh(true)},_removeCorners:function(a,d){a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb"));d==="top"?a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl"):
+d==="bottom"?a.removeClass("ui-corner-bottom ui-corner-br ui-corner-bl"):a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl ui-corner-bottom ui-corner-br ui-corner-bl")},_refreshCorners:function(a){var d,f;this.options.inset&&(d=this.element.children("li"),f=a?d.not(".ui-screen-hidden"):d.filter(":visible"),this._removeCorners(d),d=f.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),
+f=f.last().addClass("ui-corner-bottom"),f.add(f.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl"));a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,d,f,c){var e={};for(e[f]=e[c]=true;a;){if(e[a.nodeName])return a;a=a[d]}return null},_getChildrenByTagName:function(b,d,f){var c=[],e={};e[d]=e[f]=true;for(b=b.firstChild;b;)e[b.nodeName]&&c.push(b),b=b.nextSibling;return a(c)},_addThumbClasses:function(b){var d,
+f,c=b.length;for(d=0;d<c;d++)f=a(this._findFirstElementByTagName(b[d].firstChild,"nextSibling","img","IMG")),f.length&&(f.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(f[0].parentNode,"parentNode","li","LI")).addClass(f.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page");this._createSubPages();var d=this.options,f=this.element,c=f.jqmData("dividertheme")||d.dividerTheme,e=f.jqmData("splittheme"),g=f.jqmData("spliticon"),
+i=this._getChildrenByTagName(f[0],"li","LI"),k=a.support.cssPseudoElement||!a.nodeName(f[0],"ol")?0:1,l={},o,m,p,j,q;k&&f.find(".ui-li-dec").remove();if(!d.theme)d.theme=a.mobile.getInheritedTheme(this.element,"c");for(var n=0,A=i.length;n<A;n++){o=i.eq(n);m="ui-li";if(b||!o.hasClass("ui-li"))p=o.jqmData("theme")||d.theme,j=this._getChildrenByTagName(o[0],"a","A"),j.length?(q=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:false,corners:false,iconpos:"right",icon:j.length>1||q===false?false:
+q||"arrow-r",theme:p}),q!=false&&j.length==1&&o.addClass("ui-li-has-arrow"),j.first().addClass("ui-link-inherit"),j.length>1&&(m+=" ui-li-has-alt",j=j.last(),q=e||j.jqmData("theme")||d.splitTheme,j.appendTo(o).attr("title",j.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:false,corners:false,theme:p,icon:false,iconpos:false}).find(".ui-btn-inner").append(a(document.createElement("span")).buttonMarkup({shadow:true,corners:true,theme:q,iconpos:"notext",icon:g||j.jqmData("icon")||
+d.splitIcon})))):o.jqmData("role")==="list-divider"?(m+=" ui-li-divider ui-btn ui-bar-"+c,o.attr("role","heading"),k&&(k=1)):m+=" ui-li-static ui-body-"+p;k&&m.indexOf("ui-li-divider")<0&&(p=o.is(".ui-li-static:first")?o:o.find(".ui-link-inherit"),p.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+k++ +". </span>"));l[m]||(l[m]=[]);l[m].push(o[0])}for(m in l)a(l[m]).addClass(m).children(".ui-btn-inner").addClass(m);f.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=
+a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(f.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all");this._addThumbClasses(i);this._addThumbClasses(f.find(".ui-link-inherit"));this._refreshCorners(b)},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,d=b.closest(".ui-page"),f=d.jqmData("url"),c=f||d[0][a.expando],
+h=b.attr("id"),g=this.options,i="data-"+a.mobile.ns,k=this,l=d.find(":jqmData(role='footer')").jqmData("id"),o;typeof e[c]==="undefined"&&(e[c]=-1);h=h||++e[c];a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=a(this),e=d.attr("id")||h+"-"+c,c=d.parent(),k=a(d.prevAll().toArray().reverse()),k=k.length?k:a("<span>"+a.trim(c.contents()[0].nodeValue)+"</span>"),n=k.first().getEncodedText(),e=(f||"")+"&"+a.mobile.subPageUrlKey+"="+e,A=d.jqmData("theme")||g.theme,z=d.jqmData("counttheme")||
+b.jqmData("counttheme")||g.countTheme;o=true;d.detach().wrap("<div "+i+"role='page' "+i+"url='"+e+"' "+i+"theme='"+A+"' "+i+"count-theme='"+z+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+g.headerTheme+"'><div class='ui-title'>"+n+"</div></div>").after(l?a("<div "+i+"role='footer' "+i+"id='"+l+"'>"):"").parent().appendTo(a.mobile.pageContainer).page();d=c.find("a:first");d.length||(d=a("<a/>").html(k||n).prependTo(c.empty()));d.attr("href","#"+e)}).listview();
+o&&d.is(":jqmData(external-page='true')")&&d.data("page").options.domCache===false&&d.unbind("pagehide.remove").bind("pagehide.remove",function(b,c){var e=c.nextPage;c.nextPage&&(e=e.jqmData("url"),e.indexOf(f+"&"+a.mobile.subPageUrlKey)!==0&&(k.childPages().remove(),d.remove()))})},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}});a(document).bind("pagecreate create",function(b){a(a.mobile.listview.prototype.options.initSelector,
+b.target).listview()})})(jQuery);
+(function(a){a.mobile.listview.prototype.options.filter=false;a.mobile.listview.prototype.options.filterPlaceholder="Filter items...";a.mobile.listview.prototype.options.filterTheme="c";a.mobile.listview.prototype.options.filterCallback=function(a,b){return a.toLowerCase().indexOf(b)===-1};a(":jqmData(role='listview')").live("listviewcreate",function(){var e=a(this),b=e.data("listview");if(b.options.filter){var d=a("<form>",{"class":"ui-listview-filter ui-bar-"+b.options.filterTheme,role:"search"});
+a("<input>",{placeholder:b.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var d=a(this),c=this.value.toLowerCase(),h=null,h=d.jqmData("lastval")+"",g=false,i="";d.jqmData("lastval",c);i=c.substr(0,h.length-1).replace(h,"");h=c.length<h.length||i.length!=c.length-h.length?e.children():e.children(":not(.ui-screen-hidden)");if(c){for(var k=h.length-1;k>=0;k--)d=a(h[k]),i=d.jqmData("filtertext")||d.text(),d.is("li:jqmData(role=list-divider)")?
+(d.toggleClass("ui-filter-hidequeue",!g),g=false):b.options.filterCallback(i,c)?d.toggleClass("ui-filter-hidequeue",true):g=true;h.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",false);h.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",true).toggleClass("ui-filter-hidequeue",false)}else h.toggleClass("ui-screen-hidden",false);b._refreshCorners()}).appendTo(d).textinput();a(this).jqmData("inset")&&d.addClass("ui-listview-filter-inset");d.bind("submit",function(){return false}).insertBefore(e)}})})(jQuery);
+(function(a){a(document).bind("pagecreate create",function(e){a(":jqmData(role='nojs')",e.target).addClass("ui-nojs")})})(jQuery);
+(function(a,e){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var b=this,d=this.element,f=d.closest("form,fieldset,:jqmData(role='page')").find("label[for='"+d[0].id+"']"),c=d.attr("type"),h=c+"-on",g=c+"-off",i=d.parents(":jqmData(type='horizontal')").length?e:g;if(!(c!=="checkbox"&&c!=="radio")){a.extend(this,{label:f,inputtype:c,checkedClass:"ui-"+h+(i?"":" "+a.mobile.activeBtnClass),uncheckedClass:"ui-"+
+g,checkedicon:"ui-icon-"+h,uncheckedicon:"ui-icon-"+g});if(!this.options.theme)this.options.theme=this.element.jqmData("theme");f.buttonMarkup({theme:this.options.theme,icon:i,shadow:false});d.add(f).wrapAll("<div class='ui-"+c+"'></div>");f.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(d.is(":disabled"))a.preventDefault();else return b._cacheVals(),d.prop("checked",c==="radio"&&true||!d.prop("checked")),d.triggerHandler("click"),b._getInputSet().not(d).prop("checked",
+false),b._updateAll(),false}});d.bind({vmousedown:function(){b._cacheVals()},vclick:function(){var c=a(this);c.is(":checked")?(c.prop("checked",true),b._getInputSet().not(c).prop("checked",false)):c.prop("checked",false);b._updateAll()},focus:function(){f.addClass("ui-focus")},blur:function(){f.removeClass("ui-focus")}});this.refresh()}},_cacheVals:function(){this._getInputSet().each(function(){var b=a(this);b.jqmData("cacheVal",b.is(":checked"))})},_getInputSet:function(){return this.inputtype==
+"checkbox"?this.element:this.element.closest("form,fieldset,:jqmData(role='page')").find("input[name='"+this.element.attr("name")+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var d=a(this);(d.is(":checked")||b.inputtype==="checkbox")&&d.trigger("change")}).checkboxradio("refresh")},refresh:function(){var b=this.element,d=this.label,f=d.find(".ui-icon");a(b[0]).prop("checked")?(d.addClass(this.checkedClass).removeClass(this.uncheckedClass),
+f.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(d.removeClass(this.checkedClass).addClass(this.uncheckedClass),f.removeClass(this.checkedicon).addClass(this.uncheckedicon));b.is(":disabled")?this.disable():this.enable()},disable:function(){this.element.prop("disabled",true).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",false).parent().removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target)})})(jQuery);
+(function(a,e){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,inline:null,corners:true,shadow:true,iconshadow:true,initSelector:"button, [type='button'], [type='submit'], [type='reset'], [type='image']"},_create:function(){var b=this.element,d=this.options,f,c;this.button=a("<div></div>").text(b.text()||b.val()).insertBefore(b).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:d.iconpos,inline:d.inline,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow}).append(b.addClass("ui-btn-hidden"));
+d=b.attr("type");f=b.attr("name");d!=="button"&&d!=="reset"&&f&&b.bind("vclick",function(){c===e&&(c=a("<input>",{type:"hidden",name:b.attr("name"),value:b.attr("value")}).insertBefore(b),a(document).one("submit",function(){c.remove();c=e}))});this.refresh()},enable:function(){this.element.attr("disabled",false);this.button.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.button.addClass("ui-disabled").attr("aria-disabled",
+true);return this._setOption("disabled",true)},refresh:function(){var a=this.element;a.prop("disabled")?this.disable():this.enable();this.button.data("textWrapper").text(a.text()||a.val())}});a(document).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target)})})(jQuery);
+(function(a,e){a.widget("mobile.slider",a.mobile.widget,{options:{theme:null,trackTheme:null,disabled:false,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')"},_create:function(){var b=this,d=this.element,f=a.mobile.getInheritedTheme(d,"c"),c=this.options.theme||f,h=this.options.trackTheme||f,g=d[0].nodeName.toLowerCase(),f=g=="select"?"ui-slider-switch":"",i=d.attr("id"),k=i+"-label",i=a("[for='"+i+"']").attr("id",k),l=function(){return g=="input"?parseFloat(d.val()):
+d[0].selectedIndex},o=g=="input"?parseFloat(d.attr("min")):0,m=g=="input"?parseFloat(d.attr("max")):d.find("option").length-1,p=window.parseFloat(d.attr("step")||1),j=a("<div class='ui-slider "+f+" ui-btn-down-"+h+" ui-btn-corner-all' role='application'></div>"),q=a("<a href='#' class='ui-slider-handle'></a>").appendTo(j).buttonMarkup({corners:true,theme:c,shadow:true}).attr({role:"slider","aria-valuemin":o,"aria-valuemax":m,"aria-valuenow":l(),"aria-valuetext":l(),title:l(),"aria-labelledby":k});
+a.extend(this,{slider:j,handle:q,dragging:false,beforeStart:null,userModified:false,mouseMoved:false});g=="select"&&(j.wrapInner("<div class='ui-slider-inneroffset'></div>"),q.addClass("ui-slider-handle-snapping"),d.find("option"),d.find("option").each(function(b){var c=!b?"b":"a",d=!b?"right":"left",b=!b?" ui-btn-down-"+h:" "+a.mobile.activeBtnClass;a("<div class='ui-slider-labelbg ui-slider-labelbg-"+c+b+" ui-btn-corner-"+d+"'></div>").prependTo(j);a("<span class='ui-slider-label ui-slider-label-"+
+c+b+" ui-btn-corner-"+d+"' role='img'>"+a(this).getEncodedText()+"</span>").prependTo(q)}));i.addClass("ui-slider");d.addClass(g==="input"?"ui-slider-input":"ui-slider-switch").change(function(){b.mouseMoved||b.refresh(l(),true)}).keyup(function(){b.refresh(l(),true,true)}).blur(function(){b.refresh(l(),true)});a(document).bind("vmousemove",function(a){if(b.dragging)return b.mouseMoved=true,g==="select"&&q.removeClass("ui-slider-handle-snapping"),b.refresh(a),b.userModified=b.beforeStart!==d[0].selectedIndex,
+false});j.bind("vmousedown",function(a){b.dragging=true;b.userModified=false;b.mouseMoved=false;if(g==="select")b.beforeStart=d[0].selectedIndex;b.refresh(a);return false});j.add(document).bind("vmouseup",function(){if(b.dragging)return b.dragging=false,g==="select"&&(q.addClass("ui-slider-handle-snapping"),b.mouseMoved?b.userModified?b.refresh(b.beforeStart==0?1:0):b.refresh(b.beforeStart):b.refresh(b.beforeStart==0?1:0)),b.mouseMoved=false});j.insertAfter(d);this.handle.bind("vmousedown",function(){a(this).focus()}).bind("vclick",
+false);this.handle.bind("keydown",function(c){var d=l();if(!b.options.disabled){switch(c.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:if(c.preventDefault(),!b._keySliding)b._keySliding=true,a(this).addClass("ui-state-active")}switch(c.keyCode){case a.mobile.keyCode.HOME:b.refresh(o);break;case a.mobile.keyCode.END:b.refresh(m);
+break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:b.refresh(d+p);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.refresh(d-p)}}}).keyup(function(){if(b._keySliding)b._keySliding=false,a(this).removeClass("ui-state-active")});this.refresh(e,e,true)},refresh:function(a,d,f){(this.options.disabled||this.element.attr("disabled"))&&this.disable();var c=this.element,e,g=c[0].nodeName.toLowerCase(),i=g==="input"?parseFloat(c.attr("min")):
+0,k=g==="input"?parseFloat(c.attr("max")):c.find("option").length-1;if(typeof a==="object"){if(!this.dragging||a.pageX<this.slider.offset().left-8||a.pageX>this.slider.offset().left+this.slider.width()+8)return;e=Math.round((a.pageX-this.slider.offset().left)/this.slider.width()*100)}else a==null&&(a=g==="input"?parseFloat(c.val()):c[0].selectedIndex),e=(parseFloat(a)-i)/(k-i)*100;if(!isNaN(e)&&(e<0&&(e=0),e>100&&(e=100),a=Math.round(e/100*(k-i))+i,a<i&&(a=i),a>k&&(a=k),this.handle.css("left",e+"%"),
+this.handle.attr({"aria-valuenow":g==="input"?a:c.find("option").eq(a).attr("value"),"aria-valuetext":g==="input"?a:c.find("option").eq(a).getEncodedText(),title:a}),g==="select"&&(a===0?this.slider.addClass("ui-slider-switch-a").removeClass("ui-slider-switch-b"):this.slider.addClass("ui-slider-switch-b").removeClass("ui-slider-switch-a")),!f))f=false,g==="input"?(f=c.val()!==a,c.val(a)):(f=c[0].selectedIndex!==a,c[0].selectedIndex=a),!d&&f&&c.trigger("change")},enable:function(){this.element.attr("disabled",
+false);this.slider.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.slider.addClass("ui-disabled").attr("aria-disabled",true);return this._setOption("disabled",true)}});a(document).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target)})})(jQuery);
+(function(a){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])"},_create:function(){var e=this.element,
+b=this.options.theme||a.mobile.getInheritedTheme(this.element,"c"),d=" ui-body-"+b,f,c;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text");f=e.addClass("ui-input-text ui-body-"+b);typeof e[0].autocorrect!=="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off"));e.is("[type='search'],:jqmData(type='search')")?(f=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+d+"'></div>").parent(),
+c=a("<a href='#' class='ui-input-clear' title='clear text'>clear text</a>").tap(function(a){e.val("").focus();e.trigger("change");c.addClass("ui-input-clear-hidden");a.preventDefault()}).appendTo(f).buttonMarkup({icon:"delete",iconpos:"notext",corners:true,shadow:true}),b=function(){setTimeout(function(){c.toggleClass("ui-input-clear-hidden",!e.val())},0)},b(),e.bind("paste cut keyup focus change blur",b)):e.addClass("ui-corner-all ui-shadow-inset"+d);e.focus(function(){f.addClass("ui-focus")}).blur(function(){f.removeClass("ui-focus")});
+if(e.is("textarea")){var h=function(){var a=e[0].scrollHeight;e[0].clientHeight<a&&e.height(a+15)},g;e.keyup(function(){clearTimeout(g);g=setTimeout(h,100)});a.trim(e.val())&&(a(window).load(h),a(document).one("pagechange",h))}},disable:function(){(this.element.attr("disabled",true).is("[type='search'],:jqmData(type='search')")?this.element.parent():this.element).addClass("ui-disabled")},enable:function(){(this.element.attr("disabled",false).is("[type='search'],:jqmData(type='search')")?this.element.parent():
+this.element).removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(e){a.mobile.textinput.prototype.enhanceWithin(e.target)})})(jQuery);
+(function(a){var e=function(b){var d=b.selectID,f=b.label,c=b.select.closest(".ui-page"),e=a("<div>",{"class":"ui-selectmenu-screen ui-screen-hidden"}).appendTo(c),g=b._selectOptions(),i=b.isMultiple=b.select[0].multiple,k=d+"-button",l=d+"-menu",o=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+b.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+b.options.overlayTheme+"'><div data-"+a.mobile.ns+"role='header'><div class='ui-title'>"+f.getEncodedText()+"</div></div><div data-"+
+a.mobile.ns+"role='content'></div></div>").appendTo(a.mobile.pageContainer).page(),m=a("<div>",{"class":"ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-"+b.options.overlayTheme+" "+a.mobile.defaultDialogTransition}).insertAfter(e),p=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",b.options.theme).appendTo(m),j=a("<div>",{"class":"ui-header ui-bar-"+b.options.theme}).prependTo(m),q=a("<h1>",{"class":"ui-title"}).appendTo(j),
+n=a("<a>",{text:b.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(j).buttonMarkup(),A=o.find(".ui-content"),z=o.find(".ui-header a");a.extend(b,{select:b.select,selectID:d,buttonId:k,menuId:l,thisPage:c,menuPage:o,label:f,screen:e,selectOptions:g,isMultiple:i,theme:b.options.theme,listbox:m,list:p,header:j,headerTitle:q,headerClose:n,menuPageContent:A,menuPageClose:z,placeholder:"",build:function(){var b=
+this;b.refresh();b.select.attr("tabindex","-1").focus(function(){a(this).blur();b.button.focus()});b.button.bind("vclick keydown",function(c){if(c.type=="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()});b.list.attr("role","listbox").delegate(".ui-li>a","focusin",function(){a(this).attr("tabindex","0")}).delegate(".ui-li>a","focusout",function(){a(this).attr("tabindex","-1")}).delegate("li:not(.ui-disabled, .ui-li-divider)",
+"click",function(c){var d=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),e=b._selectOptions().eq(f)[0];e.selected=b.isMultiple?!e.selected:true;b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",e.selected).toggleClass("ui-icon-checkbox-off",!e.selected);(b.isMultiple||d!==f)&&b.select.trigger("change");b.isMultiple||b.close();c.preventDefault()}).keydown(function(b){var c=a(b.target),d=c.closest("li");switch(b.keyCode){case 38:return b=d.prev(),
+b.length&&(c.blur().attr("tabindex","-1"),b.find("a").first().focus()),false;case 40:return b=d.next(),b.length&&(c.blur().attr("tabindex","-1"),b.find("a").first().focus()),false;case 13:case 32:return c.trigger("click"),false}});b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox);b._focusButton();a.mobile._bindPageRemove.call(b.thisPage)});b.screen.bind("vclick",function(){b.close()});b.headerClose.click(function(){if(b.menuType=="overlay")return b.close(),false});b.thisPage.addDependents(this.menuPage)},
+_isRebuildRequired:function(){var a=this.list.find("li");return this._selectOptions().text()!==a.text()},refresh:function(b){var c=this;this._selectOptions();this.selected();var d=this.selectedIndices();(b||this._isRebuildRequired())&&c._buildList();c.setButtonText();c.setButtonCount();c.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",false).each(function(b){a.inArray(b,d)>-1&&(b=a(this),b.attr("aria-selected",true),c.isMultiple?b.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):
+b.addClass(a.mobile.activeBtnClass))})},close:function(){if(!this.options.disabled&&this.isOpen)this.menuType=="page"?window.history.back():(this.screen.addClass("ui-screen-hidden"),this.listbox.addClass("ui-selectmenu-hidden").removeAttr("style").removeClass("in"),this.list.appendTo(this.listbox),this._focusButton()),this.isOpen=false},open:function(){if(!this.options.disabled){var b=this,c=b.list.parent().outerHeight(),d=b.list.parent().outerWidth(),f=a(".ui-page-active"),e=a.support.touchOverflow&&
+a.mobile.touchOverflowEnabled,f=f.is(".ui-native-fixed")?f.find(".ui-content"):f;scrollTop=e?f.scrollTop():a(window).scrollTop();btnOffset=b.button.offset().top;screenHeight=window.innerHeight;screenWidth=window.innerWidth;b.button.addClass(a.mobile.activeBtnClass);setTimeout(function(){b.button.removeClass(a.mobile.activeBtnClass)},300);if(c>screenHeight-80||!a.support.scrollTop){b.thisPage.unbind("pagehide.remove");if(scrollTop==0&&btnOffset>screenHeight)b.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",
+btnOffset)});b.menuPage.one("pageshow",function(){a(window).one("silentscroll",function(){b.list.find(a.mobile.activeBtnClass).focus()});b.isOpen=true});b.menuType="page";b.menuPageContent.append(b.list);b.menuPage.find("div .ui-title").text(b.label.text());a.mobile.changePage(b.menuPage,{transition:a.mobile.defaultDialogTransition})}else{b.menuType="overlay";b.screen.height(a(document).height()).removeClass("ui-screen-hidden");var f=btnOffset-scrollTop,h=scrollTop+screenHeight-btnOffset,g=c/2,e=
+parseFloat(b.list.parent().css("max-width")),c=f>c/2&&h>c/2?btnOffset+b.button.outerHeight()/2-g:f>h?scrollTop+screenHeight-c-30:scrollTop+30;d<e?e=(screenWidth-d)/2:(e=b.button.offset().left+b.button.outerWidth()/2-d/2,e<30?e=30:e+d>screenWidth&&(e=screenWidth-d-30));b.listbox.append(b.list).removeClass("ui-selectmenu-hidden").css({top:c,left:e}).addClass("in");b.list.find(a.mobile.activeBtnClass).focus();b.isOpen=true}}},_buildList:function(){var b=this,c=this.options,d=this.placeholder,f=[],e=
+[],h=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");b.select.find("option").each(function(g){var j=a(this),i=j.parent(),m=j.getEncodedText(),p="<a href='#'>"+m+"</a>",k=[],n=[];i.is("optgroup")&&(i=i.attr("label"),a.inArray(i,f)===-1&&(e.push("<li data-"+a.mobile.ns+"role='list-divider'>"+i+"</li>"),f.push(i)));if(!this.getAttribute("value")||m.length==0||j.jqmData("placeholder"))c.hidePlaceholderMenuItems&&k.push("ui-selectmenu-placeholder"),d=b.placeholder=
+m;this.disabled&&(k.push("ui-disabled"),n.push("aria-disabled='true'"));e.push("<li data-"+a.mobile.ns+"option-index='"+g+"' data-"+a.mobile.ns+"icon='"+h+"' class='"+k.join(" ")+"' "+n.join(" ")+">"+p+"</li>")});b.list.html(e.join(" "));b.list.find("li").attr({role:"option",tabindex:"-1"}).first().attr("tabindex","0");this.isMultiple||this.headerClose.hide();!this.isMultiple&&!d.length?this.header.hide():this.headerTitle.text(this.placeholder);b.list.listview()},_button:function(){return a("<a>",
+{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a("select").live("selectmenubeforecreate",function(){var b=a(this).data("selectmenu");b.options.nativeMenu||e(b)})})(jQuery);
+(function(a){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:false,icon:"arrow-d",iconpos:"right",inline:null,corners:true,shadow:true,iconshadow:true,menuPageTheme:"b",overlayTheme:"a",hidePlaceholderMenuItems:true,closeText:"Close",nativeMenu:true,initSelector:"select:not(:jqmData(role='slider'))"},_button:function(){return a("<div/>")},_setDisabled:function(a){this.element.attr("disabled",a);this.button.attr("aria-disabled",a);return this._setOption("disabled",a)},_focusButton:function(){var a=
+this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){this.select=this.element.wrap("<div class='ui-select'>");this.selectID=this.select.attr("id");this.label=a("label[for='"+this.selectID+"']").addClass("ui-select");this.isMultiple=this.select[0].multiple;if(!this.options.theme)this.options.theme=a.mobile.getInheritedTheme(this.select,"c")},_create:function(){this._preExtension();this._trigger("beforeCreate");this.button=
+this._button();var e=this,b=this.options,d=this.button.text(a(this.select[0].options.item(this.select[0].selectedIndex==-1?0:this.select[0].selectedIndex)).text()).insertBefore(this.select).buttonMarkup({theme:b.theme,icon:b.icon,iconpos:b.iconpos,inline:b.inline,corners:b.corners,shadow:b.shadow,iconshadow:b.iconshadow});b.nativeMenu&&window.opera&&window.opera.version&&this.select.addClass("ui-select-nativeonly");if(this.isMultiple)this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(d.addClass("ui-li-has-count"));
+(b.disabled||this.element.attr("disabled"))&&this.disable();this.select.change(function(){e.refresh()});this.build()},build:function(){var e=this;this.select.appendTo(e.button).bind("vmousedown",function(){e.button.addClass(a.mobile.activeBtnClass)}).bind("focus vmouseover",function(){e.button.trigger("vmouseover")}).bind("vmousemove",function(){e.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){e.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",
+function(){e.button.removeClass("ui-btn-down-"+e.options.theme)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var e=this,b=this.selected();this.button.find(".ui-btn-text").text(function(){return!e.isMultiple?b.text():b.length?b.map(function(){return a(this).text()}).get().join(", "):e.placeholder})},setButtonCount:function(){var a=
+this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText();this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(true);this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(false);this.button.removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(e){a.mobile.selectmenu.prototype.enhanceWithin(e.target)})})(jQuery);
+(function(a,e){function b(b){for(var c;b;){if((c=typeof b.className==="string"&&b.className.split(" "))&&a.inArray("ui-btn",c)>-1&&a.inArray("ui-disabled",c)<0)break;b=b.parentNode}return b}a.fn.buttonMarkup=function(b){for(var b=b||{},c=0;c<this.length;c++){var h=this.eq(c),g=h[0],i=a.extend({},a.fn.buttonMarkup.defaults,{icon:b.icon!==e?b.icon:h.jqmData("icon"),iconpos:b.iconpos!==e?b.iconpos:h.jqmData("iconpos"),theme:b.theme!==e?b.theme:h.jqmData("theme"),inline:b.inline!==e?b.inline:h.jqmData("inline"),
+shadow:b.shadow!==e?b.shadow:h.jqmData("shadow"),corners:b.corners!==e?b.corners:h.jqmData("corners"),iconshadow:b.iconshadow!==e?b.iconshadow:h.jqmData("iconshadow")},b),k="ui-btn-inner",l,o,m=document.createElement(i.wrapperEls),p=document.createElement(i.wrapperEls),j=i.icon?document.createElement("span"):null;d&&d();if(!i.theme)i.theme=a.mobile.getInheritedTheme(h,"c");l="ui-btn ui-btn-up-"+i.theme;i.inline&&(l+=" ui-btn-inline");if(i.icon)i.icon="ui-icon-"+i.icon,i.iconpos=i.iconpos||"left",
+o="ui-icon "+i.icon,i.iconshadow&&(o+=" ui-icon-shadow");i.iconpos&&(l+=" ui-btn-icon-"+i.iconpos,i.iconpos=="notext"&&!h.attr("title")&&h.attr("title",h.getEncodedText()));i.corners&&(l+=" ui-btn-corner-all",k+=" ui-btn-corner-all");i.shadow&&(l+=" ui-shadow");g.setAttribute("data-"+a.mobile.ns+"theme",i.theme);h.addClass(l);m.className=k;m.setAttribute("aria-hidden","true");p.className="ui-btn-text";m.appendChild(p);if(j)j.className=o,m.appendChild(j);for(;g.firstChild;)p.appendChild(g.firstChild);
+g.appendChild(m);a.data(g,"textWrapper",a(p))}return this};a.fn.buttonMarkup.defaults={corners:true,shadow:true,iconshadow:true,inline:false,wrapperEls:"span"};var d=function(){a(document).bind({vmousedown:function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-up-"+c).addClass("ui-btn-down-"+c))},"vmousecancel vmouseup":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-down-"+c).addClass("ui-btn-up-"+
+c))},"vmouseover focus":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-up-"+c).addClass("ui-btn-hover-"+c))},"vmouseout blur":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-hover-"+c+" ui-btn-down-"+c).addClass("ui-btn-up-"+c))}});d=null};a(document).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",
+b.target).not(".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})})(jQuery);
+(function(a){a.fn.controlgroup=function(e){return this.each(function(){function b(a){a.removeClass("ui-btn-corner-all ui-shadow").eq(0).addClass(h[0]).end().last().addClass(h[1]).addClass("ui-controlgroup-last")}var d=a(this),f=a.extend({direction:d.jqmData("type")||"vertical",shadow:false,excludeInvisible:true},e),c=d.children("legend"),h=f.direction=="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"];d.find("input").first().attr("type");c.length&&(d.wrapInner("<div class='ui-controlgroup-controls'></div>"),
+a("<div role='heading' class='ui-controlgroup-label'>"+c.html()+"</div>").insertBefore(d.children(0)),c.remove());d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+f.direction);b(d.find(".ui-btn"+(f.excludeInvisible?":visible":"")));b(d.find(".ui-btn-inner"));f.shadow&&d.addClass("ui-shadow")})};a(document).bind("pagecreate create",function(e){a(":jqmData(role='controlgroup')",e.target).controlgroup({excludeInvisible:false})})})(jQuery);
+(function(a){a(document).bind("pagecreate create",function(e){a(e.target).find("a").not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})})(jQuery);
+(function(a,e){a.fn.fixHeaderFooter=function(){return!a.support.scrollTop||a.support.touchOverflow&&a.mobile.touchOverflowEnabled?this:this.each(function(){var b=a(this);b.jqmData("fullscreen")&&b.addClass("ui-page-fullscreen");b.find(".ui-header:jqmData(position='fixed')").addClass("ui-header-fixed ui-fixed-inline fade");b.find(".ui-footer:jqmData(position='fixed')").addClass("ui-footer-fixed ui-fixed-inline fade")})};a.mobile.fixedToolbars=function(){function b(){!i&&g==="overlay"&&(h||a.mobile.fixedToolbars.hide(true),
+a.mobile.fixedToolbars.startShowTimer())}function d(a){var b=0,c,d;if(a){d=document.body;c=a.offsetParent;for(b=a.offsetTop;a&&a!=d;){b+=a.scrollTop||0;if(a==c)b+=c.offsetTop,c=a.offsetParent;a=a.parentNode}}return b}function f(b){var c=a(window).scrollTop(),e=d(b[0]),f=b.css("top")=="auto"?0:parseFloat(b.css("top")),h=window.innerHeight,g=b.outerHeight(),i=b.parents(".ui-page:not(.ui-page-fullscreen)").length;return b.is(".ui-header-fixed")?(f=c-e+f,f<e&&(f=0),b.css("top",i?f:c)):b.css("top",i?c+
+h-g-(e-f):c+h-g)}if(a.support.scrollTop&&(!a.support.touchOverflow||!a.mobile.touchOverflowEnabled)){var c,h,g="inline",i=false,k=null,l=false,o=true;a(function(){var c=a(document),d=a(window);c.bind("vmousedown",function(){o&&(k=g)}).bind("vclick",function(b){o&&!a(b.target).closest("a,input,textarea,select,button,label,.ui-header-fixed,.ui-footer-fixed").length&&!l&&(a.mobile.fixedToolbars.toggle(k),k=null)}).bind("silentscroll",b);(c.scrollTop()===0?d:c).bind("scrollstart",function(){l=true;k===
+null&&(k=g);var b=k=="overlay";if(i=b||!!h)a.mobile.fixedToolbars.clearShowTimer(),b&&a.mobile.fixedToolbars.hide(true)}).bind("scrollstop",function(b){a(b.target).closest("a,input,textarea,select,button,label,.ui-header-fixed,.ui-footer-fixed").length||(l=false,i&&(a.mobile.fixedToolbars.startShowTimer(),i=false),k=null)});d.bind("resize updatelayout",b)});a(".ui-page").live("pagebeforeshow",function(b,d){var e=a(b.target).find(":jqmData(role='footer')"),h=e.data("id"),g=d.prevPage,g=g&&g.find(":jqmData(role='footer')"),
+g=g.length&&g.jqmData("id")===h;h&&g&&(c=e,f(c.removeClass("fade in out").appendTo(a.mobile.pageContainer)))}).live("pageshow",function(){var b=a(this);c&&c.length&&setTimeout(function(){f(c.appendTo(b).addClass("fade"));c=null},500);a.mobile.fixedToolbars.show(true,this)});a(".ui-collapsible-contain").live("collapse expand",b);return{show:function(b,c){a.mobile.fixedToolbars.clearShowTimer();g="overlay";return(c?a(c):a.mobile.activePage?a.mobile.activePage:a(".ui-page-active")).children(".ui-header-fixed:first, .ui-footer-fixed:not(.ui-footer-duplicate):last").each(function(){var c=
+a(this),e=a(window).scrollTop(),h=d(c[0]),g=window.innerHeight,i=c.outerHeight(),e=c.is(".ui-header-fixed")&&e<=h+i||c.is(".ui-footer-fixed")&&h<=e+g;c.addClass("ui-fixed-overlay").removeClass("ui-fixed-inline");!e&&!b&&c.animationComplete(function(){c.removeClass("in")}).addClass("in");f(c)})},hide:function(b){g="inline";return(a.mobile.activePage?a.mobile.activePage:a(".ui-page-active")).children(".ui-header-fixed:first, .ui-footer-fixed:not(.ui-footer-duplicate):last").each(function(){var c=a(this),
+d=c.css("top"),d=d=="auto"?0:parseFloat(d);c.addClass("ui-fixed-inline").removeClass("ui-fixed-overlay");if(d<0||c.is(".ui-header-fixed")&&d!==0)b?c.css("top",0):c.css("top")!=="auto"&&parseFloat(c.css("top"))!==0&&c.animationComplete(function(){c.removeClass("out reverse").css("top",0)}).addClass("out reverse")})},startShowTimer:function(){a.mobile.fixedToolbars.clearShowTimer();var b=[].slice.call(arguments);h=setTimeout(function(){h=e;a.mobile.fixedToolbars.show.apply(null,b)},100)},clearShowTimer:function(){h&&
+clearTimeout(h);h=e},toggle:function(b){b&&(g=b);return g==="overlay"?a.mobile.fixedToolbars.hide():a.mobile.fixedToolbars.show()},setTouchToggleEnabled:function(a){o=a}}}}();a(document).bind("pagecreate create",function(b){a(":jqmData(position='fixed')",b.target).length&&a(b.target).each(function(){if(!a.support.scrollTop||a.support.touchOverflow&&a.mobile.touchOverflowEnabled)return this;var b=a(this);b.jqmData("fullscreen")&&b.addClass("ui-page-fullscreen");b.find(".ui-header:jqmData(position='fixed')").addClass("ui-header-fixed ui-fixed-inline fade");
+b.find(".ui-footer:jqmData(position='fixed')").addClass("ui-footer-fixed ui-fixed-inline fade")})})})(jQuery);
+(function(a){a.mobile.touchOverflowEnabled=false;a.mobile.touchOverflowZoomEnabled=false;a(document).bind("pagecreate",function(e){a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&(e=a(e.target),e.is(":jqmData(role='page')")&&e.each(function(){var b=a(this),d=b.find(":jqmData(role='header'), :jqmData(role='footer')").filter(":jqmData(position='fixed')"),e=b.jqmData("fullscreen"),c=d.length?b.find(".ui-content"):b;b.addClass("ui-mobile-touch-overflow");c.bind("scrollstop",function(){c.scrollTop()>
+0&&window.scrollTo(0,a.mobile.defaultHomeScroll)});d.length&&(b.addClass("ui-native-fixed"),e&&(b.addClass("ui-native-fullscreen"),d.addClass("fade in"),a(document).bind("vclick",function(){d.removeClass("ui-native-bars-hidden").toggleClass("in out").animationComplete(function(){a(this).not(".in").addClass("ui-native-bars-hidden")})})))}))})})(jQuery);
+(function(a,e){function b(){var b=a("meta[name='viewport']");b.length?b.attr("content",b.attr("content")+", user-scalable=no"):a("head").prepend("<meta>",{name:"viewport",content:"user-scalable=no"})}var d=a("html");a("head");var f=a(e);a(e.document).trigger("mobileinit");if(a.mobile.gradeA()){if(a.mobile.ajaxBlacklist)a.mobile.ajaxEnabled=false;d.addClass("ui-mobile ui-mobile-rendering");var c=a("<div class='ui-loader ui-body-a ui-corner-all'><span class='ui-icon ui-icon-loading spin'></span><h1></h1></div>");
+a.extend(a.mobile,{showPageLoadingMsg:function(){if(a.mobile.loadingMessage){var b=a("."+a.mobile.activeBtnClass).first();c.find("h1").text(a.mobile.loadingMessage).end().appendTo(a.mobile.pageContainer).css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})}d.addClass("ui-loading")},hidePageLoadingMsg:function(){d.removeClass("ui-loading")},initializePage:function(){var b=a(":jqmData(role='page')");b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0));
+b.add(":jqmData(role='dialog')").each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)});a.mobile.firstPage=b.first();a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport");f.trigger("pagecontainercreate");a.mobile.showPageLoadingMsg();!a.mobile.hashListeningEnabled||!a.mobile.path.stripHash(location.hash)?a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:true,changeHash:false,fromHashChange:true}):
+f.trigger("hashchange",[true])}});a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&!a.mobile.touchOverflowZoomEnabled&&b();a.mobile._registerInternalEvents();a(function(){e.scrollTo(0,1);a.mobile.defaultHomeScroll=!a.support.scrollTop||a(e).scrollTop()===1?0:1;a.mobile.autoInitializePage&&a.mobile.initializePage();f.load(a.mobile.silentScroll)})}})(jQuery,this);
--- /dev/null
+<!--\r
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.\r
+ *\r
+ * This program is licensed under the terms and conditions of the\r
+ * Apache License, version 2.0. The full text of the Apache License is at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+-->\r
+\r
+<!DOCTYPE html>\r
+<html lang="ja">\r
+ <head>\r
+ <meta charset="UTF-8">\r
+ <meta name="viewport" content="initial-scale=1.0, user-scalable=no">\r
+ <link rel="stylesheet" href="./css/jquery.mobile-1.0.min.css">\r
+ <link rel="stylesheet" href="./css/navi.css">\r
+ <script src="http://maps.google.com/maps/api/js?sensor=false"></script>\r
+ <script type="text/javascript" src="./lib/jquery-1.6.4.min.js"></script>\r
+ <script type="text/javascript" src="./lib/jquery.mobile-1.0.min.js"></script>\r
+ <script type="text/javascript" src="./lib/CarInfoKeydef.js"></script>\r
+ <script type="text/javascript" src="./js/navi_defines.js"></script>\r
+ <script type="text/javascript" src="./js/navi_route.js"></script>\r
+ <script type="text/javascript" src="./js/nativeapp_accessor.js"></script>\r
+ <script type="text/javascript" src="./js/navi.js"></script>\r
+ <script>\r
+ var map;\r
+ \r
+ function initialize() {\r
+ map = new Navigation();\r
+ map.initialize();\r
+ }\r
+ \r
+ function finalize() {\r
+ map.finalize();\r
+ }\r
+ </script>\r
+ </head>\r
+ <body onload="initialize()" unload="finalize()">\r
+ <div data-role="content" class="base" data-theme="a" style="margin:0px; padding:0px">\r
+ <!-- Map Area -->\r
+ <div class="map_area" id="map_canvas"></div>\r
+ </div>\r
+ </body>\r
+</html>\r
--- /dev/null
+#Name Path Name Interface Name Property Name
+#----------------------------------------------------------------------------------------------------------
+# Latitude /org/automotive/runningstatus/location org.automotive.location Latitude
+# Longitude /org/automotive/runningstatus/location org.automotive.location Longitude
+# Direction /org/automotive/runningstatus/location org.automotive.location Direction
+ VehicleSpeed /org/automotive/runningstatus/vehicleSpeed org.automotive.vehicleSpeed VehicleSpeed
+ Latitude /org/automotive/custom/Latitude org.automotive.Latitude Latitude
+ Longitude /org/automotive/custom/Longitude org.automotive.Longitude Longitude
+ Direction /org/automotive/custom/Direction org.automotive.Direction Direction
--- /dev/null
+139.400453,35.479734,0
+139.400134,35.479849,1
+139.40004,35.480306,2
+139.399847,35.480227,3
+139.399785,35.480044,4
+139.399724,35.480221,5
+139.399606,35.480247,6
+139.399522,35.480258,7
+139.399488,35.480094,8
+139.39938,35.480122,9
+139.399235,35.480116,10
+139.399085,35.480188,11
+139.399133,35.480399,12
+139.399152,35.480461,13
+139.399305,35.480561,14
+139.39912,35.480662,15
+139.39902663230896,35.48200723745556,12
+139.39897298812866,35.48231301325423,8
+139.39918756484985,35.482985715916755,13
+139.3991982936859,35.4836846218105,8
+139.3987262248993,35.483964182466345,4
+139.39776062965393,35.48384187479905,8
+139.3966555595398,35.48436604920551,9
+139.3962264060974,35.48459319038668,9
+139.39759969711304,35.48612200855856,0
+139.3989086151123,35.48717032421105,7
+139.39924120903015,35.4883933418556,8
+139.40138697624207,35.49182642763903,2
+139.4017732143402,35.492446638689685,7
+139.4022023677826,35.493957837120924,13
+139.4025456905365,35.49470032304644,14
+139.40430521965027,35.49658707993647,3
+139.40493822097778,35.49720725423784,15
+139.40645098686218,35.49774007622237,11
+139.40677285194397,35.49877077101455,12
+139.40750241279602,35.498779505659655,3
+139.4086503982544,35.49989753239346,3
+139.40882205963135,35.50025564704112,13
+139.40823197364807,35.500482743307515,10
+139.40868258476257,35.5006137600922,8
+139.4096803665161,35.50083212092516,4
+139.40945506095886,35.50160074633476,12
+139.40995931625366,35.50191518188235,0
+139.41017389297485,35.50236936438911,10
+139.41080689430237,35.50372316239306,8
+139.41116094589233,35.504194802789456,3
+139.41083908081055,35.504500494159615,3
+139.41104292869568,35.50477124840149,7
+139.41147208213806,35.504456824035096,15
+139.4112253189087,35.50518174502718,9
+139.41240549087524,35.50579311909074,15
+139.41189050674438,35.505906659475826,15
+139.41272735595703,35.50693724947592,2
+139.4138216972351,35.5080638962925,3
+139.41536664962769,35.50894598858126,14
+139.4156563282013,35.50968833596895,3
+139.41603183746338,35.50995033929075,4
+139.41660046577454,35.50984553806462,8
+139.4167721271515,35.510718877436176,3
+139.41699743270874,35.5109983440289,3
+139.41805958747864,35.51115554355984,4
+139.41787719726562,35.51174067244238,3
+139.41838145256042,35.511618407058144,6
+139.4189178943634,35.51212493386643,10
+139.41840291023254,35.51223846529889,1
+139.41916465759277,35.51233453023172,4
+139.41895008087158,35.51278865381274,12
+139.41964745521545,35.5128497856371,5
+139.41944360733032,35.51313797789646,8
+139.42015171051025,35.513207842530804,14
+139.4202160835266,35.51383662150421,8
+139.42139625549316,35.51460512245079,5
+139.42252278327942,35.51691058115202,1
+139.42275881767273,35.517460737647866,3
+139.42339181900024,35.518700759097264,0
+139.42314505577087,35.5191810439487,11
+139.42339181900024,35.51976611433961,11
+139.42434668540955,35.520517093964465,7
+139.42397117614746,35.521023564627896,4
+139.42463636398315,35.5223071914777,5
+139.42479729652405,35.52168721100457,3
+139.42517280578613,35.522429440583196,14
+139.42564487457275,35.52447271949424,1
+139.42583799362183,35.52384402383153,3
+139.42604184150696,35.52509267844978,9
+139.42640662193298,35.5256253154176,10
+139.42678213119507,35.52617541218159,10
+139.4278872013092,35.52801777229219,9
+139.4272005558014,35.52744149358103,5
+139.4292175769806,35.529266361968546,13
+139.42955017089844,35.52958942046918,1
+139.43032264709473,35.53038396422107,11
+139.4315779209137,35.53021807112056,14
+139.4326937198639,35.53163251707745,1
+139.4330906867981,35.53087291031153,15
+139.4347858428955,35.53252308136877,15
+139.43576216697693,35.53319536355055,11
+139.43470001220703,35.53337871225879,6
+139.43406701087952,35.53371921589094,9
+139.4367492198944,35.534635949255815,9
+139.43809032440186,35.534042256462456,13
+139.43675994873047,35.53410337209993,2
+139.43715691566467,35.53576220733455,3
+139.43562269210815,35.53623365950984,5
+139.43554759025574,35.53735989515744,7
+139.4351077079773,35.5376916514805,13
+139.43374514579773,35.538337699329844,4
+139.4342815876007,35.53862580007154,5
+139.43340182304382,35.538651990996755,10
+139.4335949420929,35.53927184039707,13
+139.4330906867981,35.53983057377969,7
+139.43243622779846,35.539699620992344,6
+139.4320821762085,35.54021470072249,0
+139.43214654922485,35.54083453804631,2
+139.43132042884827,35.54084326811527,8
+139.429829120636,35.543095594153826,0
+139.4296145439148,35.54236228564389,6
+139.43122386932373,35.541794839933374,12
+139.431631565094,35.54155040054392,5
+139.43076252937317,35.54223133699012,15
+139.43090200424194,35.54288607812087,9
+139.43189978599548,35.544824080540316,5
+139.43243622779846,35.544509813059236,8
+139.4335412979126,35.54577560512609,4
+139.43312287330627,35.54558355520169,3
+139.43679213523865,35.54725961176013,14
+139.4371461868286,35.547713537715914,0
+139.4374680519104,35.54830712931927,5
+139.43679213523865,35.548298400062805,4
+139.4382405281067,35.54979981819631,7
+139.43893790245056,35.55096950818843,3
+139.43886280059814,35.5515979912856,3
+139.44035410881042,35.55193841757284,12
+139.43942070007324,35.552287571237635,11
+139.44077253341675,35.55281129888372,5
+139.44196343421936,35.55299460275155,3
+139.44316506385803,35.553684170690815,3
+139.44249987602234,35.553221549816755,15
+139.44286465644836,35.554129331652966,12
+139.44348692893982,35.554478475775916,1
+139.44398045539856,35.55474906142526,15
+139.44478511810303,35.5554037003475,14
+139.44716691970825,35.55672169049401,5
+139.44899082183838,35.55690498542044,1
+139.44923758506775,35.5575246937343,4
+139.4480574131012,35.55728903057388,6
+139.44862604141235,35.55923541294279,6
+139.44812178611755,35.55963690297704,1
+139.448561668396,35.56024786221378,13
+139.44752097129822,35.56054461216262,5
+139.4472312927246,35.561094469457814,1
+139.44583654403687,35.5619585232998,9
+139.44590091705322,35.56256946483868,2
+139.44514989852905,35.56246473233421,3
+139.4444739818573,35.56339859233485,13
+139.44438815116882,35.56386988203512,2
+139.4448173046112,35.56393097494148,15
+139.44507479667664,35.56365169270362,8
+139.44477438926697,35.56544955507477,9
+139.4446349143982,35.566269925472874,1
+139.44262862205505,35.56944659969592,13
+139.44254279136658,35.57010111857132,5
+139.44257497787476,35.57072945166124,13
+139.4426393508911,35.57121815176875,0
+139.44333672523499,35.57131414608242,1
+139.44332599639893,35.57006621103294,2
+139.4437873363495,35.572448615622804,6
+139.44347620010376,35.57304202405987,7
+139.44972038269043,35.575808296558876,10
+139.44907665252686,35.58498779706591,4
+139.449645280838,35.58492672021657,0
+139.45004224777222,35.5862093242696,4
+139.44939851760864,35.58619187401218,13
+139.4502353668213,35.58600864607965,9
+139.45084691047668,35.58810265460802,12
+139.4502353668213,35.58832077734695,6
+139.44799304008484,35.5949863216774,15
+139.44831490516663,35.59542252905111,14
+139.44798231124878,35.59581511365497,3
+139.44734930992126,35.59678348077855,6
+139.44701671600342,35.597394156724555,15
+139.44650173187256,35.59857187574825,0
+139.4462764263153,35.59915636690306,14
+139.44594383239746,35.599575104210366,7
+139.44606184959412,35.60099704996407,4
+139.4451928138733,35.6017559922643,7
+139.44514989852905,35.60236663026901,0
+139.4457185268402,35.60281152073829,10
+139.4454288482666,35.603867035289475,14
+139.4445812702179,35.604495103456486,7
+139.44390535354614,35.60634438665354,2
+139.4442915916443,35.60664968873113,8
+139.4437336921692,35.608115122487156,1
+139.4428539276123,35.608996114385846,15
+139.44376587867737,35.61185709047331,12
+139.44612622261047,35.61216237151433,11
--- /dev/null
+139.400453,35.479734,0
+139.400134,35.479849,1
+139.40004,35.480306,2
+139.399847,35.480227,3
+139.399785,35.480044,4
+139.399724,35.480221,5
+139.399606,35.480247,6
+139.399522,35.480258,7
+139.399488,35.480094,8
+139.39938,35.480122,9
+139.399235,35.480116,10
+139.399085,35.480188,11
+139.399133,35.480399,12
+139.399152,35.480461,13
+139.399305,35.480561,14
+139.39912,35.480662,15
+139.39902663230896,35.48200723745556,12
+139.39897298812866,35.48231301325423,8
+139.39918756484985,35.482985715916755,13
+139.3991982936859,35.4836846218105,8
+139.3987262248993,35.483964182466345,4
+139.39776062965393,35.48384187479905,8
+139.3966555595398,35.48436604920551,9
+139.3962264060974,35.48459319038668,9
+139.39759969711304,35.48612200855856,0
+139.3989086151123,35.48717032421105,7
+139.39924120903015,35.4883933418556,8
+139.40138697624207,35.49182642763903,2
+139.4017732143402,35.492446638689685,7
+139.4022023677826,35.493957837120924,13
+139.4025456905365,35.49470032304644,14
+139.40430521965027,35.49658707993647,3
+139.40493822097778,35.49720725423784,15
+139.40645098686218,35.49774007622237,11
+139.40677285194397,35.49877077101455,12
+139.40750241279602,35.498779505659655,3
+139.4086503982544,35.49989753239346,3
+139.40882205963135,35.50025564704112,13
+139.40823197364807,35.500482743307515,10
+139.40868258476257,35.5006137600922,8
+139.4096803665161,35.50083212092516,4
+139.40945506095886,35.50160074633476,12
+139.40995931625366,35.50191518188235,0
+139.41017389297485,35.50236936438911,10
+139.41080689430237,35.50372316239306,8
+139.41116094589233,35.504194802789456,3
+139.41083908081055,35.504500494159615,3
+139.41104292869568,35.50477124840149,7
+139.41147208213806,35.504456824035096,15
+139.4112253189087,35.50518174502718,9
+139.41240549087524,35.50579311909074,15
+139.41189050674438,35.505906659475826,15
+139.41272735595703,35.50693724947592,2
+139.4138216972351,35.5080638962925,3
+139.41536664962769,35.50894598858126,14
+139.4156563282013,35.50968833596895,3
+139.41603183746338,35.50995033929075,4
+139.41660046577454,35.50984553806462,8
+139.4167721271515,35.510718877436176,3
+139.41699743270874,35.5109983440289,3
+139.41805958747864,35.51115554355984,4
+139.41787719726562,35.51174067244238,3
+139.41838145256042,35.511618407058144,6
+139.4189178943634,35.51212493386643,10
+139.41840291023254,35.51223846529889,1
+139.41916465759277,35.51233453023172,4
+139.41895008087158,35.51278865381274,12
+139.41964745521545,35.5128497856371,5
+139.41944360733032,35.51313797789646,8
+139.42015171051025,35.513207842530804,14
+139.4202160835266,35.51383662150421,8
+139.42139625549316,35.51460512245079,5
+139.42252278327942,35.51691058115202,1
+139.42275881767273,35.517460737647866,3
+139.42339181900024,35.518700759097264,0
+139.42314505577087,35.5191810439487,11
+139.42339181900024,35.51976611433961,11
+139.42434668540955,35.520517093964465,7
+139.42397117614746,35.521023564627896,4
+139.42463636398315,35.5223071914777,5
+139.42479729652405,35.52168721100457,3
+139.42517280578613,35.522429440583196,14
+139.42564487457275,35.52447271949424,1
+139.42583799362183,35.52384402383153,3
+139.42604184150696,35.52509267844978,9
+139.42640662193298,35.5256253154176,10
+139.42678213119507,35.52617541218159,10
+139.4278872013092,35.52801777229219,9
+139.4272005558014,35.52744149358103,5
+139.4292175769806,35.529266361968546,13
+139.42955017089844,35.52958942046918,1
+139.43032264709473,35.53038396422107,11
+139.4315779209137,35.53021807112056,14
+139.4326937198639,35.53163251707745,1
+139.4330906867981,35.53087291031153,15
+139.4347858428955,35.53252308136877,15
+139.43576216697693,35.53319536355055,11
+139.43470001220703,35.53337871225879,6
+139.43406701087952,35.53371921589094,9
+139.4367492198944,35.534635949255815,9
+139.43809032440186,35.534042256462456,13
+139.43675994873047,35.53410337209993,2
+139.43715691566467,35.53576220733455,3
+139.43562269210815,35.53623365950984,5
+139.43554759025574,35.53735989515744,7
+139.4351077079773,35.5376916514805,13
+139.43374514579773,35.538337699329844,4
+139.4342815876007,35.53862580007154,5
+139.43340182304382,35.538651990996755,10
+139.4335949420929,35.53927184039707,13
+139.4330906867981,35.53983057377969,7
+139.43243622779846,35.539699620992344,6
+139.4320821762085,35.54021470072249,0
+139.43214654922485,35.54083453804631,2
+139.43132042884827,35.54084326811527,8
+139.429829120636,35.543095594153826,0
+139.4296145439148,35.54236228564389,6
+139.43122386932373,35.541794839933374,12
+139.431631565094,35.54155040054392,5
+139.43076252937317,35.54223133699012,15
+139.43090200424194,35.54288607812087,9
+139.43189978599548,35.544824080540316,5
+139.43243622779846,35.544509813059236,8
+139.4335412979126,35.54577560512609,4
+139.43312287330627,35.54558355520169,3
+139.43679213523865,35.54725961176013,14
+139.4371461868286,35.547713537715914,0
+139.4374680519104,35.54830712931927,5
+139.43679213523865,35.548298400062805,4
+139.4382405281067,35.54979981819631,7
+139.43893790245056,35.55096950818843,3
+139.43886280059814,35.5515979912856,3
+139.44035410881042,35.55193841757284,12
+139.43942070007324,35.552287571237635,11
+139.44077253341675,35.55281129888372,5
+139.44196343421936,35.55299460275155,3
+139.44316506385803,35.553684170690815,3
+139.44249987602234,35.553221549816755,15
+139.44286465644836,35.554129331652966,12
+139.44348692893982,35.554478475775916,1
+139.44398045539856,35.55474906142526,15
+139.44478511810303,35.5554037003475,14
+139.44716691970825,35.55672169049401,5
+139.44899082183838,35.55690498542044,1
+139.44923758506775,35.5575246937343,4
+139.4480574131012,35.55728903057388,6
+139.44862604141235,35.55923541294279,6
+139.44812178611755,35.55963690297704,1
+139.448561668396,35.56024786221378,13
+139.44752097129822,35.56054461216262,5
+139.4472312927246,35.561094469457814,1
+139.44583654403687,35.5619585232998,9
+139.44590091705322,35.56256946483868,2
+139.44514989852905,35.56246473233421,3
+139.4444739818573,35.56339859233485,13
+139.44438815116882,35.56386988203512,2
+139.4448173046112,35.56393097494148,15
+139.44507479667664,35.56365169270362,8
+139.44477438926697,35.56544955507477,9
+139.4446349143982,35.566269925472874,1
+139.44262862205505,35.56944659969592,13
+139.44254279136658,35.57010111857132,5
+139.44257497787476,35.57072945166124,13
+139.4426393508911,35.57121815176875,0
+139.44333672523499,35.57131414608242,1
+139.44332599639893,35.57006621103294,2
+139.4437873363495,35.572448615622804,6
+139.44347620010376,35.57304202405987,7
+139.44972038269043,35.575808296558876,10
+139.44907665252686,35.58498779706591,4
+139.449645280838,35.58492672021657,0
+139.45004224777222,35.5862093242696,4
+139.44939851760864,35.58619187401218,13
+139.4502353668213,35.58600864607965,9
+139.45084691047668,35.58810265460802,12
+139.4502353668213,35.58832077734695,6
+139.44799304008484,35.5949863216774,15
+139.44831490516663,35.59542252905111,14
+139.44798231124878,35.59581511365497,3
+139.44734930992126,35.59678348077855,6
+139.44701671600342,35.597394156724555,15
+139.44650173187256,35.59857187574825,0
+139.4462764263153,35.59915636690306,14
+139.44594383239746,35.599575104210366,7
+139.44606184959412,35.60099704996407,4
+139.4451928138733,35.6017559922643,7
+139.44514989852905,35.60236663026901,0
+139.4457185268402,35.60281152073829,10
+139.4454288482666,35.603867035289475,14
+139.4445812702179,35.604495103456486,7
+139.44390535354614,35.60634438665354,2
+139.4442915916443,35.60664968873113,8
+139.4437336921692,35.608115122487156,1
+139.4428539276123,35.608996114385846,15
+139.44376587867737,35.61185709047331,12
+139.44612622261047,35.61216237151433,11
--- /dev/null
+139.400453,35.479734,0
+139.400134,35.479849,1
+139.40004,35.480306,2
+139.399847,35.480227,3
+139.399785,35.480044,4
+139.399724,35.480221,5
+139.399606,35.480247,6
+139.399522,35.480258,7
+139.399488,35.480094,8
+139.39938,35.480122,9
+139.399235,35.480116,10
+139.399085,35.480188,11
+139.399133,35.480399,12
+139.399152,35.480461,13
+139.399305,35.480561,14
+139.39912,35.480662,15
+139.39902663230896,35.48200723745556,12
+139.39897298812866,35.48231301325423,8
+139.39918756484985,35.482985715916755,13
+139.3991982936859,35.4836846218105,8
+139.3987262248993,35.483964182466345,4
+139.39776062965393,35.48384187479905,8
+139.3966555595398,35.48436604920551,9
+139.3962264060974,35.48459319038668,9
+139.39759969711304,35.48612200855856,0
+139.3989086151123,35.48717032421105,7
+139.39924120903015,35.4883933418556,8
+139.40138697624207,35.49182642763903,2
+139.4017732143402,35.492446638689685,7
+139.4022023677826,35.493957837120924,13
+139.4025456905365,35.49470032304644,14
+139.40430521965027,35.49658707993647,3
+139.40493822097778,35.49720725423784,15
+139.40645098686218,35.49774007622237,11
+139.40677285194397,35.49877077101455,12
+139.40750241279602,35.498779505659655,3
+139.4086503982544,35.49989753239346,3
+139.40882205963135,35.50025564704112,13
+139.40823197364807,35.500482743307515,10
+139.40868258476257,35.5006137600922,8
+139.4096803665161,35.50083212092516,4
+139.40945506095886,35.50160074633476,12
+139.40995931625366,35.50191518188235,0
+139.41017389297485,35.50236936438911,10
+139.41080689430237,35.50372316239306,8
+139.41116094589233,35.504194802789456,3
+139.41083908081055,35.504500494159615,3
+139.41104292869568,35.50477124840149,7
+139.41147208213806,35.504456824035096,15
+139.4112253189087,35.50518174502718,9
+139.41240549087524,35.50579311909074,15
+139.41189050674438,35.505906659475826,15
+139.41272735595703,35.50693724947592,2
+139.4138216972351,35.5080638962925,3
+139.41536664962769,35.50894598858126,14
+139.4156563282013,35.50968833596895,3
+139.41603183746338,35.50995033929075,4
+139.41660046577454,35.50984553806462,8
+139.4167721271515,35.510718877436176,3
+139.41699743270874,35.5109983440289,3
+139.41805958747864,35.51115554355984,4
+139.41787719726562,35.51174067244238,3
+139.41838145256042,35.511618407058144,6
+139.4189178943634,35.51212493386643,10
+139.41840291023254,35.51223846529889,1
+139.41916465759277,35.51233453023172,4
+139.41895008087158,35.51278865381274,12
+139.41964745521545,35.5128497856371,5
+139.41944360733032,35.51313797789646,8
+139.42015171051025,35.513207842530804,14
+139.4202160835266,35.51383662150421,8
+139.42139625549316,35.51460512245079,5
+139.42252278327942,35.51691058115202,1
+139.42275881767273,35.517460737647866,3
+139.42339181900024,35.518700759097264,0
+139.42314505577087,35.5191810439487,11
+139.42339181900024,35.51976611433961,11
+139.42434668540955,35.520517093964465,7
+139.42397117614746,35.521023564627896,4
+139.42463636398315,35.5223071914777,5
+139.42479729652405,35.52168721100457,3
+139.42517280578613,35.522429440583196,14
+139.42564487457275,35.52447271949424,1
+139.42583799362183,35.52384402383153,3
+139.42604184150696,35.52509267844978,9
+139.42640662193298,35.5256253154176,10
+139.42678213119507,35.52617541218159,10
+139.4278872013092,35.52801777229219,9
+139.4272005558014,35.52744149358103,5
+139.4292175769806,35.529266361968546,13
+139.42955017089844,35.52958942046918,1
+139.43032264709473,35.53038396422107,11
+139.4315779209137,35.53021807112056,14
+139.4326937198639,35.53163251707745,1
+139.4330906867981,35.53087291031153,15
+139.4347858428955,35.53252308136877,15
+139.43576216697693,35.53319536355055,11
+139.43470001220703,35.53337871225879,6
+139.43406701087952,35.53371921589094,9
+139.4367492198944,35.534635949255815,9
+139.43809032440186,35.534042256462456,13
+139.43675994873047,35.53410337209993,2
+139.43715691566467,35.53576220733455,3
+139.43562269210815,35.53623365950984,5
+139.43554759025574,35.53735989515744,7
+139.4351077079773,35.5376916514805,13
+139.43374514579773,35.538337699329844,4
+139.4342815876007,35.53862580007154,5
+139.43340182304382,35.538651990996755,10
+139.4335949420929,35.53927184039707,13
+139.4330906867981,35.53983057377969,7
+139.43243622779846,35.539699620992344,6
+139.4320821762085,35.54021470072249,0
+139.43214654922485,35.54083453804631,2
+139.43132042884827,35.54084326811527,8
+139.429829120636,35.543095594153826,0
+139.4296145439148,35.54236228564389,6
+139.43122386932373,35.541794839933374,12
+139.431631565094,35.54155040054392,5
+139.43076252937317,35.54223133699012,15
+139.43090200424194,35.54288607812087,9
+139.43189978599548,35.544824080540316,5
+139.43243622779846,35.544509813059236,8
+139.4335412979126,35.54577560512609,4
+139.43312287330627,35.54558355520169,3
+139.43679213523865,35.54725961176013,14
+139.4371461868286,35.547713537715914,0
+139.4374680519104,35.54830712931927,5
+139.43679213523865,35.548298400062805,4
+139.4382405281067,35.54979981819631,7
+139.43893790245056,35.55096950818843,3
+139.43886280059814,35.5515979912856,3
+139.44035410881042,35.55193841757284,12
+139.43942070007324,35.552287571237635,11
+139.44077253341675,35.55281129888372,5
+139.44196343421936,35.55299460275155,3
+139.44316506385803,35.553684170690815,3
+139.44249987602234,35.553221549816755,15
+139.44286465644836,35.554129331652966,12
+139.44348692893982,35.554478475775916,1
+139.44398045539856,35.55474906142526,15
+139.44478511810303,35.5554037003475,14
+139.44716691970825,35.55672169049401,5
+139.44899082183838,35.55690498542044,1
+139.44923758506775,35.5575246937343,4
+139.4480574131012,35.55728903057388,6
+139.44862604141235,35.55923541294279,6
+139.44812178611755,35.55963690297704,1
+139.448561668396,35.56024786221378,13
+139.44752097129822,35.56054461216262,5
+139.4472312927246,35.561094469457814,1
+139.44583654403687,35.5619585232998,9
+139.44590091705322,35.56256946483868,2
+139.44514989852905,35.56246473233421,3
+139.4444739818573,35.56339859233485,13
+139.44438815116882,35.56386988203512,2
+139.4448173046112,35.56393097494148,15
+139.44507479667664,35.56365169270362,8
+139.44477438926697,35.56544955507477,9
+139.4446349143982,35.566269925472874,1
+139.44262862205505,35.56944659969592,13
+139.44254279136658,35.57010111857132,5
+139.44257497787476,35.57072945166124,13
+139.4426393508911,35.57121815176875,0
+139.44333672523499,35.57131414608242,1
+139.44332599639893,35.57006621103294,2
+139.4437873363495,35.572448615622804,6
+139.44347620010376,35.57304202405987,7
+139.44972038269043,35.575808296558876,10
+139.44907665252686,35.58498779706591,4
+139.449645280838,35.58492672021657,0
+139.45004224777222,35.5862093242696,4
+139.44939851760864,35.58619187401218,13
+139.4502353668213,35.58600864607965,9
+139.45084691047668,35.58810265460802,12
+139.4502353668213,35.58832077734695,6
+139.44799304008484,35.5949863216774,15
+139.44831490516663,35.59542252905111,14
+139.44798231124878,35.59581511365497,3
+139.44734930992126,35.59678348077855,6
+139.44701671600342,35.597394156724555,15
+139.44650173187256,35.59857187574825,0
+139.4462764263153,35.59915636690306,14
+139.44594383239746,35.599575104210366,7
+139.44606184959412,35.60099704996407,4
+139.4451928138733,35.6017559922643,7
+139.44514989852905,35.60236663026901,0
+139.4457185268402,35.60281152073829,10
+139.4454288482666,35.603867035289475,14
+139.4445812702179,35.604495103456486,7
+139.44390535354614,35.60634438665354,2
+139.4442915916443,35.60664968873113,8
+139.4437336921692,35.608115122487156,1
+139.4428539276123,35.608996114385846,15
+139.44376587867737,35.61185709047331,12
+139.44612622261047,35.61216237151433,11
--- /dev/null
+139.40035700798035,35.47984493254008,0
+139.40014779567719,35.47982309077956,6
+139.39997613430023,35.47984493254008,1
+139.3999707698822,35.48007208649779,0
+139.40014779567719,35.48007208649779,10
+139.40036237239838,35.48007208649779,15
+139.40056085586548,35.4798711426449,5
+139.40055549144745,35.480085191514235,0
+139.40070569515228,35.4798798793446,7
+139.4007110595703,35.48011140154069,8
+139.39983129501343,35.48014197989409,6
+139.3998098373413,35.47985803759355,11
+139.39984738826752,35.48036039636587,0
+139.3999868631363,35.480312344792985,15
+139.40016388893127,35.48032108144475,11
+139.40031945705414,35.48032544977027,6
+139.4005286693573,35.480316713118995,2
+139.40071642398834,35.48035165971838,5
+139.40072178840637,35.480578812244154,10
+139.4005286693573,35.480657441815055,7
+139.40039992332458,35.480583180555655,9
+139.4002068042755,35.480600653799335,11
+139.40005660057068,35.48061812703922,10
+139.3998795747757,35.480639968583716,2
+139.4008880853653,35.480430289511496,3
+139.40085589885712,35.48069675657165,5
+139.39969718456268,35.480692388266334,15
+139.3997186422348,35.48041718455131,1
+139.39969718456268,35.480888961771626,13
+139.39989030361176,35.48084527881199,11
+139.4000780582428,35.480801595828616,4
+139.40022826194763,35.4807928592291,9
+139.40038919448853,35.48078849092899,12
+139.40050721168518,35.480836542217226,6
+139.4006896018982,35.48081906902482,0
+139.4008719921112,35.480888961771626,1
+139.4008505344391,35.48108553479622,7
+139.40071642398834,35.48106369337276,7
+139.40049648284912,35.481059325087365,0
+139.40036237239838,35.48107679822756,3
+139.4002068042755,35.48107242994285,2
+139.4000780582428,35.481089903080196,6
+139.39992785453796,35.481094271363915,12
+139.3997722864151,35.481094271363915,1
+139.39979374408722,35.48128647561338,6
+139.39994394779205,35.48128210734007,4
+139.40010488033295,35.481295212159246,1
+139.4002389907837,35.481295212159246,1
+139.40039455890656,35.481317053519774,12
+139.40053403377533,35.481299580431816,10
+139.40066277980804,35.48130831697628,9
+139.40081298351288,35.48128647561338,5
+139.401016831398,35.48108116651199,4
+139.40103828907013,35.480950117875224,4
+139.40102756023407,35.48076228112329,12
+139.40100073814392,35.48130831697628,9
+139.39964354038239,35.481303948704166,2
+139.39960598945618,35.48110737621372,2
+139.39956843852997,35.48091953982924,13
+139.39955234527588,35.4807185980948,9
+139.40117239952087,35.48097632761967,10
+139.40115094184875,35.48121658321221,6
+139.40111875534058,35.48141315543558,15
+139.3994504213333,35.481369472760825,3
+139.3994826078415,35.4811903735461,15
+139.39947187900543,35.48096759103915,1
+139.39948797225952,35.481557308093876,1
+139.39963281154633,35.481517993758175,7
+139.39981520175934,35.481517993758175,6
+139.39996540546417,35.48150925723651,9
+139.4001317024231,35.48150488897531,6
+139.4002765417099,35.48150488897531,14
+139.40043210983276,35.48152236201864,11
+139.40055549144745,35.48153109853888,6
+139.40069496631622,35.48154857157651,10
+139.40086662769318,35.48154420331745,14
+139.39934313297272,35.481089903080196,9
+139.3993592262268,35.48131268524814,8
+139.3993377685547,35.4815747811258,0
+139.4011026620865,35.481627200198794,13
+139.40130650997162,35.481566044610325,6
+139.40127968788147,35.48141752370175,5
+139.40129041671753,35.48124279286974,2
+139.40127432346344,35.481037483656806,0
+139.39931094646454,35.48182813966185,14
+139.39946115016937,35.481736406491024,9
+139.39963817596436,35.48174077473965,10
+139.39979374408722,35.481736406491024,1
+139.3999868631363,35.481732038242185,13
+139.40014243125916,35.481749511236124,2
+139.40030336380005,35.48175824773168,12
+139.40043210983276,35.481736406491024,10
+139.40057158470154,35.48175387948402,13
+139.4007110595703,35.481766984226276,2
+139.40088272094727,35.48178445721261,8
+139.40109193325043,35.481801930195154,10
+139.4013011455536,35.48176261597909,7
+139.39933240413666,35.482037815087764,6
+139.3994826078415,35.481985396282575,9
+139.3996810913086,35.481998500987075,14
+139.39984738826752,35.48200286922143,10
+139.39999222755432,35.48200723745556,4
+139.40016388893127,35.48200286922143,12
+139.40028190612793,35.481998500987075,12
+139.40044283866882,35.48198976451765,9
+139.40055549144745,35.48198976451765,11
+139.40067887306213,35.48199413275249,15
+139.40088272094727,35.482037815087764,2
+139.40100610256195,35.482015973923104,12
+139.4012153148651,35.48200286922143,9
+139.40136015415192,35.482015973923104,7
--- /dev/null
+USBCAMERAID=0
+LANDMARKPOSITION=-80
+LANDMARKROTATION=180
+WEBSOCKETPORT=50414
+IPADDR=127.0.0.1
+#PROXYURI=
--- /dev/null
+## audioTP Config File
+## /opt/apps/org.tizen.ico.ico-app-soundsample/res/soundsample_config.txt
+
+[data]
+wavfile_path=/opt/apps/org.tizen.ico.app-soundsample/sounds/musicbox.wav
+server_ip=127.0.0.1
+device_name=0
+volume1=30000
+volume2=30000
+app_name=SampleSound
+stream_name=sample_sound
--- /dev/null
+ico_app_soundsample-soundsample.o: soundsample.c ../config.h \
+ /usr/include/ecore-1/Ecore.h /usr/include/eina-1/Eina.h \
+ /usr/include/eina-1/eina_config.h /usr/include/eina-1/eina/eina_types.h \
+ /usr/include/eina-1/eina_config.h /usr/include/eina-1/eina/eina_main.h \
+ /usr/include/eina-1/eina/eina_types.h /usr/include/eina-1/eina/eina_fp.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h \
+ /usr/include/stdint.h /usr/include/features.h \
+ /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-32.h /usr/include/bits/wchar.h \
+ /usr/include/eina-1/eina/eina_inline_f32p32.x /usr/include/stdlib.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/sys/types.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \
+ /usr/include/bits/sigset.h /usr/include/bits/time.h \
+ /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+ /usr/include/alloca.h /usr/include/eina-1/eina/eina_inline_f16p16.x \
+ /usr/include/eina-1/eina/eina_inline_f8p24.x \
+ /usr/include/eina-1/eina/eina_inline_fp.x \
+ /usr/include/eina-1/eina/eina_rectangle.h \
+ /usr/include/eina-1/eina/eina_inline_rectangle.x \
+ /usr/include/eina-1/eina/eina_clist.h \
+ /usr/include/eina-1/eina/eina_inline_clist.x \
+ /usr/include/eina-1/eina/eina_inlist.h \
+ /usr/include/eina-1/eina/eina_iterator.h \
+ /usr/include/eina-1/eina/eina_magic.h \
+ /usr/include/eina-1/eina/eina_error.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h \
+ /usr/include/eina-1/eina/eina_accessor.h \
+ /usr/include/eina-1/eina/eina_file.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h \
+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/bits/posix2_lim.h /usr/include/xlocale.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h \
+ /usr/include/eina-1/eina/eina_array.h \
+ /usr/include/eina-1/eina/eina_inline_array.x /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/eina-1/eina/eina_list.h \
+ /usr/include/eina-1/eina/eina_inline_list.x \
+ /usr/include/eina-1/eina/eina_hash.h \
+ /usr/include/eina-1/eina/eina_inline_hash.x \
+ /usr/include/eina-1/eina/eina_trash.h \
+ /usr/include/eina-1/eina/eina_inline_trash.x \
+ /usr/include/eina-1/eina/eina_lalloc.h \
+ /usr/include/eina-1/eina/eina_module.h \
+ /usr/include/eina-1/eina/eina_mempool.h \
+ /usr/include/eina-1/eina/eina_module.h \
+ /usr/include/eina-1/eina/eina_inline_mempool.x /usr/include/string.h \
+ /usr/include/bits/string.h /usr/include/bits/string2.h \
+ /usr/include/eina-1/eina/eina_error.h \
+ /usr/include/eina-1/eina/eina_log.h \
+ /usr/include/eina-1/eina/eina_inline_log.x \
+ /usr/include/eina-1/eina/eina_inarray.h \
+ /usr/include/eina-1/eina/eina_array.h \
+ /usr/include/eina-1/eina/eina_binshare.h \
+ /usr/include/eina-1/eina/eina_stringshare.h \
+ /usr/include/eina-1/eina/eina_inline_stringshare.x \
+ /usr/include/eina-1/eina/eina_stringshare.h \
+ /usr/include/eina-1/eina/eina_ustringshare.h \
+ /usr/include/eina-1/eina/eina_unicode.h \
+ /usr/include/eina-1/eina/eina_inline_ustringshare.x \
+ /usr/include/eina-1/eina/eina_ustringshare.h \
+ /usr/include/eina-1/eina/eina_magic.h \
+ /usr/include/eina-1/eina/eina_counter.h \
+ /usr/include/eina-1/eina/eina_rbtree.h \
+ /usr/include/eina-1/eina/eina_inline_rbtree.x \
+ /usr/include/eina-1/eina/eina_accessor.h \
+ /usr/include/eina-1/eina/eina_iterator.h \
+ /usr/include/eina-1/eina/eina_benchmark.h \
+ /usr/include/eina-1/eina/eina_convert.h \
+ /usr/include/eina-1/eina/eina_fp.h /usr/include/eina-1/eina/eina_cpu.h \
+ /usr/include/eina-1/eina/eina_sched.h \
+ /usr/include/eina-1/eina/eina_tiler.h \
+ /usr/include/eina-1/eina/eina_rectangle.h \
+ /usr/include/eina-1/eina/eina_inline_tiler.x \
+ /usr/include/eina-1/eina/eina_safety_checks.h \
+ /usr/include/eina-1/eina/eina_log.h \
+ /usr/include/eina-1/eina/eina_hamster.h \
+ /usr/include/eina-1/eina/eina_matrixsparse.h \
+ /usr/include/eina-1/eina/eina_str.h \
+ /usr/include/eina-1/eina/eina_inline_str.x \
+ /usr/include/eina-1/eina/eina_strbuf.h \
+ /usr/include/eina-1/eina/eina_binbuf.h \
+ /usr/include/eina-1/eina/eina_ustrbuf.h \
+ /usr/include/eina-1/eina/eina_unicode.h \
+ /usr/include/eina-1/eina/eina_quadtree.h \
+ /usr/include/eina-1/eina/eina_inlist.h \
+ /usr/include/eina-1/eina/eina_simple_xml_parser.h \
+ /usr/include/eina-1/eina/eina_lock.h \
+ /usr/include/eina-1/eina/eina_inline_lock_posix.x /usr/include/errno.h \
+ /usr/include/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
+ /usr/include/asm-generic/errno-base.h /usr/include/pthread.h \
+ /usr/include/sched.h /usr/include/bits/sched.h \
+ /usr/include/bits/setjmp.h /usr/include/semaphore.h \
+ /usr/include/bits/semaphore.h /usr/include/sys/time.h \
+ /usr/include/eina-1/eina/eina_prefix.h \
+ /usr/include/eina-1/eina/eina_refcount.h \
+ /usr/include/eina-1/eina/eina_mmap.h \
+ /usr/include/eina-1/eina/eina_xattr.h \
+ /usr/include/eina-1/eina/eina_value.h \
+ /usr/include/eina-1/eina/eina_inarray.h \
+ /usr/include/eina-1/eina/eina_list.h \
+ /usr/include/eina-1/eina/eina_hash.h \
+ /usr/include/eina-1/eina/eina_inline_value.x /usr/include/signal.h \
+ /usr/include/bits/signum.h /usr/include/bits/siginfo.h \
+ /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \
+ /usr/include/asm/sigcontext.h /usr/include/linux/types.h \
+ /usr/include/asm/types.h /usr/include/asm-generic/types.h \
+ /usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \
+ /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \
+ /usr/include/linux/stddef.h /usr/include/asm/posix_types.h \
+ /usr/include/asm/posix_types_32.h /usr/include/asm-generic/posix_types.h \
+ /usr/include/bits/sigstack.h /usr/include/sys/ucontext.h \
+ /usr/include/bits/sigthread.h /usr/include/ecore-1/Ecore_Evas.h \
+ /usr/include/evas-1/Evas.h /usr/include/ecore-1/Ecore_Getopt.h \
+ /usr/include/ecore-1/Ecore_Input.h /usr/include/inttypes.h \
+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
+ /usr/include/bits/environments.h /usr/include/bits/confname.h \
+ /usr/include/getopt.h /usr/include/glib-2.0/glib.h \
+ /usr/include/glib-2.0/glib/galloca.h /usr/include/glib-2.0/glib/gtypes.h \
+ /usr/lib/glib-2.0/include/glibconfig.h \
+ /usr/include/glib-2.0/glib/gmacros.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/float.h \
+ /usr/include/glib-2.0/glib/gversionmacros.h \
+ /usr/include/glib-2.0/glib/garray.h \
+ /usr/include/glib-2.0/glib/gasyncqueue.h \
+ /usr/include/glib-2.0/glib/gthread.h \
+ /usr/include/glib-2.0/glib/gatomic.h /usr/include/glib-2.0/glib/gerror.h \
+ /usr/include/glib-2.0/glib/gquark.h \
+ /usr/include/glib-2.0/glib/gbacktrace.h \
+ /usr/include/glib-2.0/glib/gbase64.h \
+ /usr/include/glib-2.0/glib/gbitlock.h \
+ /usr/include/glib-2.0/glib/gbookmarkfile.h \
+ /usr/include/glib-2.0/glib/gbytes.h \
+ /usr/include/glib-2.0/glib/gcharset.h \
+ /usr/include/glib-2.0/glib/gchecksum.h \
+ /usr/include/glib-2.0/glib/gconvert.h \
+ /usr/include/glib-2.0/glib/gdataset.h /usr/include/glib-2.0/glib/gdate.h \
+ /usr/include/glib-2.0/glib/gdatetime.h \
+ /usr/include/glib-2.0/glib/gtimezone.h /usr/include/glib-2.0/glib/gdir.h \
+ /usr/include/glib-2.0/glib/genviron.h \
+ /usr/include/glib-2.0/glib/gfileutils.h \
+ /usr/include/glib-2.0/glib/ggettext.h /usr/include/glib-2.0/glib/ghash.h \
+ /usr/include/glib-2.0/glib/glist.h /usr/include/glib-2.0/glib/gmem.h \
+ /usr/include/glib-2.0/glib/ghmac.h \
+ /usr/include/glib-2.0/glib/gchecksum.h \
+ /usr/include/glib-2.0/glib/ghook.h \
+ /usr/include/glib-2.0/glib/ghostutils.h \
+ /usr/include/glib-2.0/glib/giochannel.h \
+ /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gpoll.h \
+ /usr/include/glib-2.0/glib/gslist.h /usr/include/glib-2.0/glib/gstring.h \
+ /usr/include/glib-2.0/glib/gunicode.h \
+ /usr/include/glib-2.0/glib/gutils.h \
+ /usr/include/glib-2.0/glib/gkeyfile.h \
+ /usr/include/glib-2.0/glib/gmappedfile.h \
+ /usr/include/glib-2.0/glib/gmarkup.h \
+ /usr/include/glib-2.0/glib/gmessages.h \
+ /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \
+ /usr/include/glib-2.0/glib/gpattern.h \
+ /usr/include/glib-2.0/glib/gprimes.h /usr/include/glib-2.0/glib/gqsort.h \
+ /usr/include/glib-2.0/glib/gqueue.h /usr/include/glib-2.0/glib/grand.h \
+ /usr/include/glib-2.0/glib/gregex.h \
+ /usr/include/glib-2.0/glib/gscanner.h \
+ /usr/include/glib-2.0/glib/gsequence.h \
+ /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gslice.h \
+ /usr/include/glib-2.0/glib/gspawn.h \
+ /usr/include/glib-2.0/glib/gstrfuncs.h \
+ /usr/include/glib-2.0/glib/gstringchunk.h \
+ /usr/include/glib-2.0/glib/gtestutils.h \
+ /usr/include/glib-2.0/glib/gthreadpool.h \
+ /usr/include/glib-2.0/glib/gtimer.h \
+ /usr/include/glib-2.0/glib/gtrashstack.h \
+ /usr/include/glib-2.0/glib/gtree.h \
+ /usr/include/glib-2.0/glib/gurifuncs.h \
+ /usr/include/glib-2.0/glib/gvarianttype.h \
+ /usr/include/glib-2.0/glib/gvariant.h \
+ /usr/include/glib-2.0/glib/gversion.h \
+ /usr/include/glib-2.0/glib/deprecated/gallocator.h \
+ /usr/include/glib-2.0/glib/deprecated/gcache.h \
+ /usr/include/glib-2.0/glib/deprecated/gcompletion.h \
+ /usr/include/glib-2.0/glib/deprecated/gmain.h \
+ /usr/include/glib-2.0/glib/deprecated/grel.h \
+ /usr/include/glib-2.0/glib/deprecated/gthread.h app_log.h \
+ /usr/include/ico-appfw/ico_apf_log.h /usr/include/ico-appfw/ico_apf.h \
+ /usr/include/ico-appfw/ico_apf_resource_control.h \
+ /usr/include/ico-appfw/ico_uxf_sysdef.h \
+ /usr/include/ico-appfw/ico_apf_error.h /usr/include/tizen.h \
+ /usr/include/tizen_type.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdbool.h \
+ /usr/include/tizen_error.h /usr/include/ico-appfw/ico_apf_ecore.h \
+ soundsample.h
+
+../config.h:
+
+/usr/include/ecore-1/Ecore.h:
+
+/usr/include/eina-1/Eina.h:
+
+/usr/include/eina-1/eina_config.h:
+
+/usr/include/eina-1/eina/eina_types.h:
+
+/usr/include/eina-1/eina_config.h:
+
+/usr/include/eina-1/eina/eina_main.h:
+
+/usr/include/eina-1/eina/eina_types.h:
+
+/usr/include/eina-1/eina/eina_fp.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/features.h:
+
+/usr/include/bits/predefs.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/eina-1/eina/eina_inline_f32p32.x:
+
+/usr/include/stdlib.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/eina-1/eina/eina_inline_f16p16.x:
+
+/usr/include/eina-1/eina/eina_inline_f8p24.x:
+
+/usr/include/eina-1/eina/eina_inline_fp.x:
+
+/usr/include/eina-1/eina/eina_rectangle.h:
+
+/usr/include/eina-1/eina/eina_inline_rectangle.x:
+
+/usr/include/eina-1/eina/eina_clist.h:
+
+/usr/include/eina-1/eina/eina_inline_clist.x:
+
+/usr/include/eina-1/eina/eina_inlist.h:
+
+/usr/include/eina-1/eina/eina_iterator.h:
+
+/usr/include/eina-1/eina/eina_magic.h:
+
+/usr/include/eina-1/eina/eina_error.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h:
+
+/usr/include/eina-1/eina/eina_accessor.h:
+
+/usr/include/eina-1/eina/eina_file.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+/usr/include/eina-1/eina/eina_array.h:
+
+/usr/include/eina-1/eina/eina_inline_array.x:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/eina-1/eina/eina_list.h:
+
+/usr/include/eina-1/eina/eina_inline_list.x:
+
+/usr/include/eina-1/eina/eina_hash.h:
+
+/usr/include/eina-1/eina/eina_inline_hash.x:
+
+/usr/include/eina-1/eina/eina_trash.h:
+
+/usr/include/eina-1/eina/eina_inline_trash.x:
+
+/usr/include/eina-1/eina/eina_lalloc.h:
+
+/usr/include/eina-1/eina/eina_module.h:
+
+/usr/include/eina-1/eina/eina_mempool.h:
+
+/usr/include/eina-1/eina/eina_module.h:
+
+/usr/include/eina-1/eina/eina_inline_mempool.x:
+
+/usr/include/string.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/eina-1/eina/eina_error.h:
+
+/usr/include/eina-1/eina/eina_log.h:
+
+/usr/include/eina-1/eina/eina_inline_log.x:
+
+/usr/include/eina-1/eina/eina_inarray.h:
+
+/usr/include/eina-1/eina/eina_array.h:
+
+/usr/include/eina-1/eina/eina_binshare.h:
+
+/usr/include/eina-1/eina/eina_stringshare.h:
+
+/usr/include/eina-1/eina/eina_inline_stringshare.x:
+
+/usr/include/eina-1/eina/eina_stringshare.h:
+
+/usr/include/eina-1/eina/eina_ustringshare.h:
+
+/usr/include/eina-1/eina/eina_unicode.h:
+
+/usr/include/eina-1/eina/eina_inline_ustringshare.x:
+
+/usr/include/eina-1/eina/eina_ustringshare.h:
+
+/usr/include/eina-1/eina/eina_magic.h:
+
+/usr/include/eina-1/eina/eina_counter.h:
+
+/usr/include/eina-1/eina/eina_rbtree.h:
+
+/usr/include/eina-1/eina/eina_inline_rbtree.x:
+
+/usr/include/eina-1/eina/eina_accessor.h:
+
+/usr/include/eina-1/eina/eina_iterator.h:
+
+/usr/include/eina-1/eina/eina_benchmark.h:
+
+/usr/include/eina-1/eina/eina_convert.h:
+
+/usr/include/eina-1/eina/eina_fp.h:
+
+/usr/include/eina-1/eina/eina_cpu.h:
+
+/usr/include/eina-1/eina/eina_sched.h:
+
+/usr/include/eina-1/eina/eina_tiler.h:
+
+/usr/include/eina-1/eina/eina_rectangle.h:
+
+/usr/include/eina-1/eina/eina_inline_tiler.x:
+
+/usr/include/eina-1/eina/eina_safety_checks.h:
+
+/usr/include/eina-1/eina/eina_log.h:
+
+/usr/include/eina-1/eina/eina_hamster.h:
+
+/usr/include/eina-1/eina/eina_matrixsparse.h:
+
+/usr/include/eina-1/eina/eina_str.h:
+
+/usr/include/eina-1/eina/eina_inline_str.x:
+
+/usr/include/eina-1/eina/eina_strbuf.h:
+
+/usr/include/eina-1/eina/eina_binbuf.h:
+
+/usr/include/eina-1/eina/eina_ustrbuf.h:
+
+/usr/include/eina-1/eina/eina_unicode.h:
+
+/usr/include/eina-1/eina/eina_quadtree.h:
+
+/usr/include/eina-1/eina/eina_inlist.h:
+
+/usr/include/eina-1/eina/eina_simple_xml_parser.h:
+
+/usr/include/eina-1/eina/eina_lock.h:
+
+/usr/include/eina-1/eina/eina_inline_lock_posix.x:
+
+/usr/include/errno.h:
+
+/usr/include/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/pthread.h:
+
+/usr/include/sched.h:
+
+/usr/include/bits/sched.h:
+
+/usr/include/bits/setjmp.h:
+
+/usr/include/semaphore.h:
+
+/usr/include/bits/semaphore.h:
+
+/usr/include/sys/time.h:
+
+/usr/include/eina-1/eina/eina_prefix.h:
+
+/usr/include/eina-1/eina/eina_refcount.h:
+
+/usr/include/eina-1/eina/eina_mmap.h:
+
+/usr/include/eina-1/eina/eina_xattr.h:
+
+/usr/include/eina-1/eina/eina_value.h:
+
+/usr/include/eina-1/eina/eina_inarray.h:
+
+/usr/include/eina-1/eina/eina_list.h:
+
+/usr/include/eina-1/eina/eina_hash.h:
+
+/usr/include/eina-1/eina/eina_inline_value.x:
+
+/usr/include/signal.h:
+
+/usr/include/bits/signum.h:
+
+/usr/include/bits/siginfo.h:
+
+/usr/include/bits/sigaction.h:
+
+/usr/include/bits/sigcontext.h:
+
+/usr/include/asm/sigcontext.h:
+
+/usr/include/linux/types.h:
+
+/usr/include/asm/types.h:
+
+/usr/include/asm-generic/types.h:
+
+/usr/include/asm-generic/int-ll64.h:
+
+/usr/include/asm/bitsperlong.h:
+
+/usr/include/asm-generic/bitsperlong.h:
+
+/usr/include/linux/posix_types.h:
+
+/usr/include/linux/stddef.h:
+
+/usr/include/asm/posix_types.h:
+
+/usr/include/asm/posix_types_32.h:
+
+/usr/include/asm-generic/posix_types.h:
+
+/usr/include/bits/sigstack.h:
+
+/usr/include/sys/ucontext.h:
+
+/usr/include/bits/sigthread.h:
+
+/usr/include/ecore-1/Ecore_Evas.h:
+
+/usr/include/evas-1/Evas.h:
+
+/usr/include/ecore-1/Ecore_Getopt.h:
+
+/usr/include/ecore-1/Ecore_Input.h:
+
+/usr/include/inttypes.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/glib-2.0/glib.h:
+
+/usr/include/glib-2.0/glib/galloca.h:
+
+/usr/include/glib-2.0/glib/gtypes.h:
+
+/usr/lib/glib-2.0/include/glibconfig.h:
+
+/usr/include/glib-2.0/glib/gmacros.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/float.h:
+
+/usr/include/glib-2.0/glib/gversionmacros.h:
+
+/usr/include/glib-2.0/glib/garray.h:
+
+/usr/include/glib-2.0/glib/gasyncqueue.h:
+
+/usr/include/glib-2.0/glib/gthread.h:
+
+/usr/include/glib-2.0/glib/gatomic.h:
+
+/usr/include/glib-2.0/glib/gerror.h:
+
+/usr/include/glib-2.0/glib/gquark.h:
+
+/usr/include/glib-2.0/glib/gbacktrace.h:
+
+/usr/include/glib-2.0/glib/gbase64.h:
+
+/usr/include/glib-2.0/glib/gbitlock.h:
+
+/usr/include/glib-2.0/glib/gbookmarkfile.h:
+
+/usr/include/glib-2.0/glib/gbytes.h:
+
+/usr/include/glib-2.0/glib/gcharset.h:
+
+/usr/include/glib-2.0/glib/gchecksum.h:
+
+/usr/include/glib-2.0/glib/gconvert.h:
+
+/usr/include/glib-2.0/glib/gdataset.h:
+
+/usr/include/glib-2.0/glib/gdate.h:
+
+/usr/include/glib-2.0/glib/gdatetime.h:
+
+/usr/include/glib-2.0/glib/gtimezone.h:
+
+/usr/include/glib-2.0/glib/gdir.h:
+
+/usr/include/glib-2.0/glib/genviron.h:
+
+/usr/include/glib-2.0/glib/gfileutils.h:
+
+/usr/include/glib-2.0/glib/ggettext.h:
+
+/usr/include/glib-2.0/glib/ghash.h:
+
+/usr/include/glib-2.0/glib/glist.h:
+
+/usr/include/glib-2.0/glib/gmem.h:
+
+/usr/include/glib-2.0/glib/ghmac.h:
+
+/usr/include/glib-2.0/glib/gchecksum.h:
+
+/usr/include/glib-2.0/glib/ghook.h:
+
+/usr/include/glib-2.0/glib/ghostutils.h:
+
+/usr/include/glib-2.0/glib/giochannel.h:
+
+/usr/include/glib-2.0/glib/gmain.h:
+
+/usr/include/glib-2.0/glib/gpoll.h:
+
+/usr/include/glib-2.0/glib/gslist.h:
+
+/usr/include/glib-2.0/glib/gstring.h:
+
+/usr/include/glib-2.0/glib/gunicode.h:
+
+/usr/include/glib-2.0/glib/gutils.h:
+
+/usr/include/glib-2.0/glib/gkeyfile.h:
+
+/usr/include/glib-2.0/glib/gmappedfile.h:
+
+/usr/include/glib-2.0/glib/gmarkup.h:
+
+/usr/include/glib-2.0/glib/gmessages.h:
+
+/usr/include/glib-2.0/glib/gnode.h:
+
+/usr/include/glib-2.0/glib/goption.h:
+
+/usr/include/glib-2.0/glib/gpattern.h:
+
+/usr/include/glib-2.0/glib/gprimes.h:
+
+/usr/include/glib-2.0/glib/gqsort.h:
+
+/usr/include/glib-2.0/glib/gqueue.h:
+
+/usr/include/glib-2.0/glib/grand.h:
+
+/usr/include/glib-2.0/glib/gregex.h:
+
+/usr/include/glib-2.0/glib/gscanner.h:
+
+/usr/include/glib-2.0/glib/gsequence.h:
+
+/usr/include/glib-2.0/glib/gshell.h:
+
+/usr/include/glib-2.0/glib/gslice.h:
+
+/usr/include/glib-2.0/glib/gspawn.h:
+
+/usr/include/glib-2.0/glib/gstrfuncs.h:
+
+/usr/include/glib-2.0/glib/gstringchunk.h:
+
+/usr/include/glib-2.0/glib/gtestutils.h:
+
+/usr/include/glib-2.0/glib/gthreadpool.h:
+
+/usr/include/glib-2.0/glib/gtimer.h:
+
+/usr/include/glib-2.0/glib/gtrashstack.h:
+
+/usr/include/glib-2.0/glib/gtree.h:
+
+/usr/include/glib-2.0/glib/gurifuncs.h:
+
+/usr/include/glib-2.0/glib/gvarianttype.h:
+
+/usr/include/glib-2.0/glib/gvariant.h:
+
+/usr/include/glib-2.0/glib/gversion.h:
+
+/usr/include/glib-2.0/glib/deprecated/gallocator.h:
+
+/usr/include/glib-2.0/glib/deprecated/gcache.h:
+
+/usr/include/glib-2.0/glib/deprecated/gcompletion.h:
+
+/usr/include/glib-2.0/glib/deprecated/gmain.h:
+
+/usr/include/glib-2.0/glib/deprecated/grel.h:
+
+/usr/include/glib-2.0/glib/deprecated/gthread.h:
+
+app_log.h:
+
+/usr/include/ico-appfw/ico_apf_log.h:
+
+/usr/include/ico-appfw/ico_apf.h:
+
+/usr/include/ico-appfw/ico_apf_resource_control.h:
+
+/usr/include/ico-appfw/ico_uxf_sysdef.h:
+
+/usr/include/ico-appfw/ico_apf_error.h:
+
+/usr/include/tizen.h:
+
+/usr/include/tizen_type.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdbool.h:
+
+/usr/include/tizen_error.h:
+
+/usr/include/ico-appfw/ico_apf_ecore.h:
+
+soundsample.h:
--- /dev/null
+ico_app_soundsample-soundsample_pulse_async_test.o: \
+ soundsample_pulse_async_test.cpp /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/bits/predefs.h \
+ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
+ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/stdlib.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/xlocale.h \
+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
+ /usr/include/bits/select.h /usr/include/bits/sigset.h \
+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
+ /usr/include/bits/environments.h /usr/include/bits/confname.h \
+ /usr/include/getopt.h /usr/include/string.h \
+ /usr/include/pulse/mainloop.h /usr/include/pulse/mainloop-api.h \
+ /usr/include/sys/time.h /usr/include/pulse/cdecl.h \
+ /usr/include/pulse/version.h /usr/include/pulse/context.h \
+ /usr/include/pulse/sample.h /usr/include/inttypes.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h \
+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/sys/param.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h \
+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
+ /usr/include/linux/param.h /usr/include/asm/param.h \
+ /usr/include/asm-generic/param.h /usr/include/pulse/gccmacro.h \
+ /usr/include/pulse/def.h /usr/include/pulse/operation.h \
+ /usr/include/pulse/proplist.h /usr/include/pulse/stream.h \
+ /usr/include/pulse/format.h /usr/include/pulse/channelmap.h \
+ /usr/include/pulse/volume.h /usr/include/pulse/error.h \
+ soundsample_yswavfile.h app_log.h /usr/include/ico-appfw/ico_apf_log.h \
+ soundsample.h
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/bits/predefs.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/environments.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/string.h:
+
+/usr/include/pulse/mainloop.h:
+
+/usr/include/pulse/mainloop-api.h:
+
+/usr/include/sys/time.h:
+
+/usr/include/pulse/cdecl.h:
+
+/usr/include/pulse/version.h:
+
+/usr/include/pulse/context.h:
+
+/usr/include/pulse/sample.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/sys/param.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/include/bits/xopen_lim.h:
+
+/usr/include/linux/param.h:
+
+/usr/include/asm/param.h:
+
+/usr/include/asm-generic/param.h:
+
+/usr/include/pulse/gccmacro.h:
+
+/usr/include/pulse/def.h:
+
+/usr/include/pulse/operation.h:
+
+/usr/include/pulse/proplist.h:
+
+/usr/include/pulse/stream.h:
+
+/usr/include/pulse/format.h:
+
+/usr/include/pulse/channelmap.h:
+
+/usr/include/pulse/volume.h:
+
+/usr/include/pulse/error.h:
+
+soundsample_yswavfile.h:
+
+app_log.h:
+
+/usr/include/ico-appfw/ico_apf_log.h:
+
+soundsample.h:
--- /dev/null
+ico_app_soundsample-soundsample_yswavfile.o: soundsample_yswavfile.cpp \
+ /usr/include/stdio.h /usr/include/features.h /usr/include/bits/predefs.h \
+ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
+ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/string.h /usr/include/xlocale.h \
+ /usr/include/math.h /usr/include/bits/huge_val.h \
+ /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
+ /usr/include/bits/inf.h /usr/include/bits/nan.h \
+ /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
+ /usr/include/bits/mathinline.h soundsample_yswavfile.h app_log.h \
+ /usr/include/ico-appfw/ico_apf_log.h
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/bits/predefs.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/math.h:
+
+/usr/include/bits/huge_val.h:
+
+/usr/include/bits/huge_valf.h:
+
+/usr/include/bits/huge_vall.h:
+
+/usr/include/bits/inf.h:
+
+/usr/include/bits/nan.h:
+
+/usr/include/bits/mathdef.h:
+
+/usr/include/bits/mathcalls.h:
+
+/usr/include/bits/mathinline.h:
+
+soundsample_yswavfile.h:
+
+app_log.h:
+
+/usr/include/ico-appfw/ico_apf_log.h:
--- /dev/null
+ico_app_vicsample-vicsample.o: vicsample.c ../config.h \
+ /usr/include/ecore-1/Ecore.h /usr/include/eina-1/Eina.h \
+ /usr/include/eina-1/eina_config.h /usr/include/eina-1/eina/eina_types.h \
+ /usr/include/eina-1/eina_config.h /usr/include/eina-1/eina/eina_main.h \
+ /usr/include/eina-1/eina/eina_types.h /usr/include/eina-1/eina/eina_fp.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h \
+ /usr/include/stdint.h /usr/include/features.h \
+ /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
+ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
+ /usr/include/gnu/stubs-32.h /usr/include/bits/wchar.h \
+ /usr/include/eina-1/eina/eina_inline_f32p32.x /usr/include/stdlib.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h \
+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+ /usr/include/endian.h /usr/include/bits/endian.h \
+ /usr/include/bits/byteswap.h /usr/include/sys/types.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \
+ /usr/include/bits/sigset.h /usr/include/bits/time.h \
+ /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+ /usr/include/alloca.h /usr/include/eina-1/eina/eina_inline_f16p16.x \
+ /usr/include/eina-1/eina/eina_inline_f8p24.x \
+ /usr/include/eina-1/eina/eina_inline_fp.x \
+ /usr/include/eina-1/eina/eina_rectangle.h \
+ /usr/include/eina-1/eina/eina_inline_rectangle.x \
+ /usr/include/eina-1/eina/eina_clist.h \
+ /usr/include/eina-1/eina/eina_inline_clist.x \
+ /usr/include/eina-1/eina/eina_inlist.h \
+ /usr/include/eina-1/eina/eina_iterator.h \
+ /usr/include/eina-1/eina/eina_magic.h \
+ /usr/include/eina-1/eina/eina_error.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h \
+ /usr/include/eina-1/eina/eina_accessor.h \
+ /usr/include/eina-1/eina/eina_file.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h \
+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+ /usr/include/bits/posix2_lim.h /usr/include/xlocale.h \
+ /usr/include/sys/stat.h /usr/include/bits/stat.h \
+ /usr/include/eina-1/eina/eina_array.h \
+ /usr/include/eina-1/eina/eina_inline_array.x /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdio.h /usr/include/eina-1/eina/eina_list.h \
+ /usr/include/eina-1/eina/eina_inline_list.x \
+ /usr/include/eina-1/eina/eina_hash.h \
+ /usr/include/eina-1/eina/eina_inline_hash.x \
+ /usr/include/eina-1/eina/eina_trash.h \
+ /usr/include/eina-1/eina/eina_inline_trash.x \
+ /usr/include/eina-1/eina/eina_lalloc.h \
+ /usr/include/eina-1/eina/eina_module.h \
+ /usr/include/eina-1/eina/eina_mempool.h \
+ /usr/include/eina-1/eina/eina_module.h \
+ /usr/include/eina-1/eina/eina_inline_mempool.x /usr/include/string.h \
+ /usr/include/bits/string.h /usr/include/bits/string2.h \
+ /usr/include/eina-1/eina/eina_error.h \
+ /usr/include/eina-1/eina/eina_log.h \
+ /usr/include/eina-1/eina/eina_inline_log.x \
+ /usr/include/eina-1/eina/eina_inarray.h \
+ /usr/include/eina-1/eina/eina_array.h \
+ /usr/include/eina-1/eina/eina_binshare.h \
+ /usr/include/eina-1/eina/eina_stringshare.h \
+ /usr/include/eina-1/eina/eina_inline_stringshare.x \
+ /usr/include/eina-1/eina/eina_stringshare.h \
+ /usr/include/eina-1/eina/eina_ustringshare.h \
+ /usr/include/eina-1/eina/eina_unicode.h \
+ /usr/include/eina-1/eina/eina_inline_ustringshare.x \
+ /usr/include/eina-1/eina/eina_ustringshare.h \
+ /usr/include/eina-1/eina/eina_magic.h \
+ /usr/include/eina-1/eina/eina_counter.h \
+ /usr/include/eina-1/eina/eina_rbtree.h \
+ /usr/include/eina-1/eina/eina_inline_rbtree.x \
+ /usr/include/eina-1/eina/eina_accessor.h \
+ /usr/include/eina-1/eina/eina_iterator.h \
+ /usr/include/eina-1/eina/eina_benchmark.h \
+ /usr/include/eina-1/eina/eina_convert.h \
+ /usr/include/eina-1/eina/eina_fp.h /usr/include/eina-1/eina/eina_cpu.h \
+ /usr/include/eina-1/eina/eina_sched.h \
+ /usr/include/eina-1/eina/eina_tiler.h \
+ /usr/include/eina-1/eina/eina_rectangle.h \
+ /usr/include/eina-1/eina/eina_inline_tiler.x \
+ /usr/include/eina-1/eina/eina_safety_checks.h \
+ /usr/include/eina-1/eina/eina_log.h \
+ /usr/include/eina-1/eina/eina_hamster.h \
+ /usr/include/eina-1/eina/eina_matrixsparse.h \
+ /usr/include/eina-1/eina/eina_str.h \
+ /usr/include/eina-1/eina/eina_inline_str.x \
+ /usr/include/eina-1/eina/eina_strbuf.h \
+ /usr/include/eina-1/eina/eina_binbuf.h \
+ /usr/include/eina-1/eina/eina_ustrbuf.h \
+ /usr/include/eina-1/eina/eina_unicode.h \
+ /usr/include/eina-1/eina/eina_quadtree.h \
+ /usr/include/eina-1/eina/eina_inlist.h \
+ /usr/include/eina-1/eina/eina_simple_xml_parser.h \
+ /usr/include/eina-1/eina/eina_lock.h \
+ /usr/include/eina-1/eina/eina_inline_lock_posix.x /usr/include/errno.h \
+ /usr/include/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
+ /usr/include/asm-generic/errno-base.h /usr/include/pthread.h \
+ /usr/include/sched.h /usr/include/bits/sched.h \
+ /usr/include/bits/setjmp.h /usr/include/semaphore.h \
+ /usr/include/bits/semaphore.h /usr/include/sys/time.h \
+ /usr/include/eina-1/eina/eina_prefix.h \
+ /usr/include/eina-1/eina/eina_refcount.h \
+ /usr/include/eina-1/eina/eina_mmap.h \
+ /usr/include/eina-1/eina/eina_xattr.h \
+ /usr/include/eina-1/eina/eina_value.h \
+ /usr/include/eina-1/eina/eina_inarray.h \
+ /usr/include/eina-1/eina/eina_list.h \
+ /usr/include/eina-1/eina/eina_hash.h \
+ /usr/include/eina-1/eina/eina_inline_value.x /usr/include/signal.h \
+ /usr/include/bits/signum.h /usr/include/bits/siginfo.h \
+ /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \
+ /usr/include/asm/sigcontext.h /usr/include/linux/types.h \
+ /usr/include/asm/types.h /usr/include/asm-generic/types.h \
+ /usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \
+ /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \
+ /usr/include/linux/stddef.h /usr/include/asm/posix_types.h \
+ /usr/include/asm/posix_types_32.h /usr/include/asm-generic/posix_types.h \
+ /usr/include/bits/sigstack.h /usr/include/sys/ucontext.h \
+ /usr/include/bits/sigthread.h /usr/include/ecore-1/Ecore_Evas.h \
+ /usr/include/evas-1/Evas.h /usr/include/ecore-1/Ecore_Getopt.h \
+ /usr/include/ecore-1/Ecore_Input.h /usr/include/inttypes.h \
+ /usr/include/dbus-1.0/dbus/dbus.h \
+ /usr/lib/dbus-1.0/include/dbus/dbus-arch-deps.h \
+ /usr/include/dbus-1.0/dbus/dbus-macros.h \
+ /usr/include/dbus-1.0/dbus/dbus-address.h \
+ /usr/include/dbus-1.0/dbus/dbus-types.h \
+ /usr/include/dbus-1.0/dbus/dbus-errors.h \
+ /usr/include/dbus-1.0/dbus/dbus-protocol.h \
+ /usr/include/dbus-1.0/dbus/dbus-bus.h \
+ /usr/include/dbus-1.0/dbus/dbus-connection.h \
+ /usr/include/dbus-1.0/dbus/dbus-memory.h \
+ /usr/include/dbus-1.0/dbus/dbus-message.h \
+ /usr/include/dbus-1.0/dbus/dbus-shared.h \
+ /usr/include/dbus-1.0/dbus/dbus-misc.h \
+ /usr/include/dbus-1.0/dbus/dbus-pending-call.h \
+ /usr/include/dbus-1.0/dbus/dbus-server.h \
+ /usr/include/dbus-1.0/dbus/dbus-signature.h \
+ /usr/include/dbus-1.0/dbus/dbus-threads.h \
+ /usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdbool.h app_log.h \
+ /usr/include/ico-appfw/ico_apf_log.h /usr/include/ico-appfw/ico_apf.h \
+ /usr/include/ico-appfw/ico_apf_resource_control.h \
+ /usr/include/ico-appfw/ico_uxf_sysdef.h \
+ /usr/include/ico-appfw/ico_apf_error.h /usr/include/tizen.h \
+ /usr/include/tizen_type.h /usr/include/tizen_error.h \
+ /usr/include/ico-appfw/ico_apf_ecore.h
+
+../config.h:
+
+/usr/include/ecore-1/Ecore.h:
+
+/usr/include/eina-1/Eina.h:
+
+/usr/include/eina-1/eina_config.h:
+
+/usr/include/eina-1/eina/eina_types.h:
+
+/usr/include/eina-1/eina_config.h:
+
+/usr/include/eina-1/eina/eina_main.h:
+
+/usr/include/eina-1/eina/eina_types.h:
+
+/usr/include/eina-1/eina/eina_fp.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/features.h:
+
+/usr/include/bits/predefs.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/include/gnu/stubs-32.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/eina-1/eina/eina_inline_f32p32.x:
+
+/usr/include/stdlib.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stddef.h:
+
+/usr/include/bits/waitflags.h:
+
+/usr/include/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/bits/byteswap.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/time.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/eina-1/eina/eina_inline_f16p16.x:
+
+/usr/include/eina-1/eina/eina_inline_f8p24.x:
+
+/usr/include/eina-1/eina/eina_inline_fp.x:
+
+/usr/include/eina-1/eina/eina_rectangle.h:
+
+/usr/include/eina-1/eina/eina_inline_rectangle.x:
+
+/usr/include/eina-1/eina/eina_clist.h:
+
+/usr/include/eina-1/eina/eina_inline_clist.x:
+
+/usr/include/eina-1/eina/eina_inlist.h:
+
+/usr/include/eina-1/eina/eina_iterator.h:
+
+/usr/include/eina-1/eina/eina_magic.h:
+
+/usr/include/eina-1/eina/eina_error.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdarg.h:
+
+/usr/include/eina-1/eina/eina_accessor.h:
+
+/usr/include/eina-1/eina/eina_file.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/limits.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+/usr/include/eina-1/eina/eina_array.h:
+
+/usr/include/eina-1/eina/eina_inline_array.x:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/eina-1/eina/eina_list.h:
+
+/usr/include/eina-1/eina/eina_inline_list.x:
+
+/usr/include/eina-1/eina/eina_hash.h:
+
+/usr/include/eina-1/eina/eina_inline_hash.x:
+
+/usr/include/eina-1/eina/eina_trash.h:
+
+/usr/include/eina-1/eina/eina_inline_trash.x:
+
+/usr/include/eina-1/eina/eina_lalloc.h:
+
+/usr/include/eina-1/eina/eina_module.h:
+
+/usr/include/eina-1/eina/eina_mempool.h:
+
+/usr/include/eina-1/eina/eina_module.h:
+
+/usr/include/eina-1/eina/eina_inline_mempool.x:
+
+/usr/include/string.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/eina-1/eina/eina_error.h:
+
+/usr/include/eina-1/eina/eina_log.h:
+
+/usr/include/eina-1/eina/eina_inline_log.x:
+
+/usr/include/eina-1/eina/eina_inarray.h:
+
+/usr/include/eina-1/eina/eina_array.h:
+
+/usr/include/eina-1/eina/eina_binshare.h:
+
+/usr/include/eina-1/eina/eina_stringshare.h:
+
+/usr/include/eina-1/eina/eina_inline_stringshare.x:
+
+/usr/include/eina-1/eina/eina_stringshare.h:
+
+/usr/include/eina-1/eina/eina_ustringshare.h:
+
+/usr/include/eina-1/eina/eina_unicode.h:
+
+/usr/include/eina-1/eina/eina_inline_ustringshare.x:
+
+/usr/include/eina-1/eina/eina_ustringshare.h:
+
+/usr/include/eina-1/eina/eina_magic.h:
+
+/usr/include/eina-1/eina/eina_counter.h:
+
+/usr/include/eina-1/eina/eina_rbtree.h:
+
+/usr/include/eina-1/eina/eina_inline_rbtree.x:
+
+/usr/include/eina-1/eina/eina_accessor.h:
+
+/usr/include/eina-1/eina/eina_iterator.h:
+
+/usr/include/eina-1/eina/eina_benchmark.h:
+
+/usr/include/eina-1/eina/eina_convert.h:
+
+/usr/include/eina-1/eina/eina_fp.h:
+
+/usr/include/eina-1/eina/eina_cpu.h:
+
+/usr/include/eina-1/eina/eina_sched.h:
+
+/usr/include/eina-1/eina/eina_tiler.h:
+
+/usr/include/eina-1/eina/eina_rectangle.h:
+
+/usr/include/eina-1/eina/eina_inline_tiler.x:
+
+/usr/include/eina-1/eina/eina_safety_checks.h:
+
+/usr/include/eina-1/eina/eina_log.h:
+
+/usr/include/eina-1/eina/eina_hamster.h:
+
+/usr/include/eina-1/eina/eina_matrixsparse.h:
+
+/usr/include/eina-1/eina/eina_str.h:
+
+/usr/include/eina-1/eina/eina_inline_str.x:
+
+/usr/include/eina-1/eina/eina_strbuf.h:
+
+/usr/include/eina-1/eina/eina_binbuf.h:
+
+/usr/include/eina-1/eina/eina_ustrbuf.h:
+
+/usr/include/eina-1/eina/eina_unicode.h:
+
+/usr/include/eina-1/eina/eina_quadtree.h:
+
+/usr/include/eina-1/eina/eina_inlist.h:
+
+/usr/include/eina-1/eina/eina_simple_xml_parser.h:
+
+/usr/include/eina-1/eina/eina_lock.h:
+
+/usr/include/eina-1/eina/eina_inline_lock_posix.x:
+
+/usr/include/errno.h:
+
+/usr/include/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/pthread.h:
+
+/usr/include/sched.h:
+
+/usr/include/bits/sched.h:
+
+/usr/include/bits/setjmp.h:
+
+/usr/include/semaphore.h:
+
+/usr/include/bits/semaphore.h:
+
+/usr/include/sys/time.h:
+
+/usr/include/eina-1/eina/eina_prefix.h:
+
+/usr/include/eina-1/eina/eina_refcount.h:
+
+/usr/include/eina-1/eina/eina_mmap.h:
+
+/usr/include/eina-1/eina/eina_xattr.h:
+
+/usr/include/eina-1/eina/eina_value.h:
+
+/usr/include/eina-1/eina/eina_inarray.h:
+
+/usr/include/eina-1/eina/eina_list.h:
+
+/usr/include/eina-1/eina/eina_hash.h:
+
+/usr/include/eina-1/eina/eina_inline_value.x:
+
+/usr/include/signal.h:
+
+/usr/include/bits/signum.h:
+
+/usr/include/bits/siginfo.h:
+
+/usr/include/bits/sigaction.h:
+
+/usr/include/bits/sigcontext.h:
+
+/usr/include/asm/sigcontext.h:
+
+/usr/include/linux/types.h:
+
+/usr/include/asm/types.h:
+
+/usr/include/asm-generic/types.h:
+
+/usr/include/asm-generic/int-ll64.h:
+
+/usr/include/asm/bitsperlong.h:
+
+/usr/include/asm-generic/bitsperlong.h:
+
+/usr/include/linux/posix_types.h:
+
+/usr/include/linux/stddef.h:
+
+/usr/include/asm/posix_types.h:
+
+/usr/include/asm/posix_types_32.h:
+
+/usr/include/asm-generic/posix_types.h:
+
+/usr/include/bits/sigstack.h:
+
+/usr/include/sys/ucontext.h:
+
+/usr/include/bits/sigthread.h:
+
+/usr/include/ecore-1/Ecore_Evas.h:
+
+/usr/include/evas-1/Evas.h:
+
+/usr/include/ecore-1/Ecore_Getopt.h:
+
+/usr/include/ecore-1/Ecore_Input.h:
+
+/usr/include/inttypes.h:
+
+/usr/include/dbus-1.0/dbus/dbus.h:
+
+/usr/lib/dbus-1.0/include/dbus/dbus-arch-deps.h:
+
+/usr/include/dbus-1.0/dbus/dbus-macros.h:
+
+/usr/include/dbus-1.0/dbus/dbus-address.h:
+
+/usr/include/dbus-1.0/dbus/dbus-types.h:
+
+/usr/include/dbus-1.0/dbus/dbus-errors.h:
+
+/usr/include/dbus-1.0/dbus/dbus-protocol.h:
+
+/usr/include/dbus-1.0/dbus/dbus-bus.h:
+
+/usr/include/dbus-1.0/dbus/dbus-connection.h:
+
+/usr/include/dbus-1.0/dbus/dbus-memory.h:
+
+/usr/include/dbus-1.0/dbus/dbus-message.h:
+
+/usr/include/dbus-1.0/dbus/dbus-shared.h:
+
+/usr/include/dbus-1.0/dbus/dbus-misc.h:
+
+/usr/include/dbus-1.0/dbus/dbus-pending-call.h:
+
+/usr/include/dbus-1.0/dbus/dbus-server.h:
+
+/usr/include/dbus-1.0/dbus/dbus-signature.h:
+
+/usr/include/dbus-1.0/dbus/dbus-threads.h:
+
+/usr/lib/gcc/i586-tizen-linux/4.5.3/include/stdbool.h:
+
+app_log.h:
+
+/usr/include/ico-appfw/ico_apf_log.h:
+
+/usr/include/ico-appfw/ico_apf.h:
+
+/usr/include/ico-appfw/ico_apf_resource_control.h:
+
+/usr/include/ico-appfw/ico_uxf_sysdef.h:
+
+/usr/include/ico-appfw/ico_apf_error.h:
+
+/usr/include/tizen.h:
+
+/usr/include/tizen_type.h:
+
+/usr/include/tizen_error.h:
+
+/usr/include/ico-appfw/ico_apf_ecore.h:
--- /dev/null
+##ico-app-soundsample
+app_soundsample_bindir = /opt/apps/org.tizen.ico.app-soundsample/bin
+app_soundsample_bin_PROGRAMS = ico-app-soundsample
+
+ico_app_soundsample_SOURCES = soundsample.c soundsample.h soundsample_pulse_async_test.cpp soundsample_yswavfile.cpp soundsample_yswavfile.h
+ico_app_soundsample_LDADD = -L/usr/lib -lico-app-fw-efl -lico-uxf-weston-plugin -lico-app-fw -lwebsockets -laul -lecore_evas -lecore -leina -levas -leina -lrt -lecore_wayland -lelementary -lm -leet -levas -lrt -lecore -leina -lecore_evas -lecore_file -ledje -lethumb_client -lecore_imf -lecore_con -lpulse -lglib-2.0
+ico_app_soundsample_CFLAGS = -Wall -I. -I/usr/include/ico-appfw -I/usr/include/eina-1 -I/usr/include/eina-1/eina/ -I/usr/include/ecore-1 -I/usr/include/evas-1 -I/usr/include/elementary-1 -I/usr/include/ -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+ico_app_soundsample_CPPFLAGS = -Wall -I. -I/usr/include/ico-appfw -I/usr/include/eina-1 -I/usr/include/eina-1/eina/ -I/usr/include/ecore-1 -I/usr/include/evas-1 -I/usr/include/elementary-1 -I/usr/include/ -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+
+
+##ico-app-vicsample
+app_vicsample_bindir = /opt/apps/org.tizen.ico.app-vicsample/bin
+app_vicsample_bin_PROGRAMS = ico-app-vicsample
+
+ico_app_vicsample_SOURCES = vicsample.c
+ico_app_vicsample_LDADD = -L/usr/lib -lico-app-fw-efl -lico-uxf-weston-plugin -lico-app-fw -laul -lwebsockets -lecore_evas -lecore -leina -levas -leina -lrt -lecore_wayland -lelementary -lm -leet -levas -lrt -lecore -leina -lecore_evas -lecore_file -ledje -lethumb_client -lecore_imf -lecore_con -ldbus-1 -lpthread -lrt
+ico_app_vicsample_CFLAGS = -Wall -I. -I/usr/include/ico-appfw -I/usr/include/eina-1 -I/usr/include/eina-1/eina/ -I/usr/include/ecore-1 -I/usr/include/evas-1 -I/usr/include/elementary-1 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I~/HomeScreen/include
+
+
+##ico-app-samplenavi
+app_samplenavi_bindir = /opt/apps/org.tizen.ico.app-samplenavi/bin
+app_samplenavi_bin_PROGRAMS = ico-app-samplenavi
+
+ico_app_samplenavi_SOURCES = samplenavi.c samplenavi.h e3d.c e3d.h define.h
+ico_app_samplenavi_LDADD = -L/usr/lib -lico-app-fw-efl -lico-uxf-weston-plugin -lico-app-fw -ldbus-1 -lpthread -lrt -lwebsockets -laul -lecore_evas -lecore -leina -levas -lecore_wayland -lelementary -lm -leet -lecore_file -ledje -lethumb_client -lecore_imf -lecore_con -lglib-2.0 -lwayland-client -lwayland-cursor -lwayland-egl -lwayland-server -lewebkit2 -lcairo -lGLESv2 -lEGL -lpangocairo-1.0 -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgdk_pixbuf-2.0 -lgthread-2.0
+
+ico_app_samplenavi_CFLAGS = -Wall -I. -I/usr/include/ico-appfw -I/usr/include/ecore-1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/eina-1 -I/usr/include/eina-1/eina -I/usr/include/evas-1 -I/usr/include/eet-1 -I/usr/include/pixman-1 -I/usr/include/harfbuzz -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/libdrm -I/usr/include/elementary-1 -I/usr/include/ethumb-1 -I/usr/include/efreet-1 -I/usr/include/e_dbus-1 -I/usr/include/emotion-1 -I/usr/include/edje-1 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/embryo-1 -I/usr/include/ewebkit2-0 -I/usr/include/ewebkit2-0/WebKit2 -I/usr/include/ewebkit2-0/NPAPI -I/usr/include/cairo -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/gdk-pixbuf-2.0
+
+#ico_app_samplenavi_LDADD = -L/usr/lib -lico-app-fw-efl -lico-uxf-weston-plugin -lico-app-fw -ldbus-1 -lpthread -lrt /usr/lib/libopencv_calib3d.so /usr/lib/libopencv_contrib.so /usr/lib/libopencv_core.so /usr/lib/libopencv_features2d.so /usr/lib/libopencv_flann.so /usr/lib/libopencv_gpu.so /usr/lib/libopencv_highgui.so /usr/lib/libopencv_imgproc.so /usr/lib/libopencv_legacy.so /usr/lib/libopencv_ml.so /usr/lib/libopencv_nonfree.so /usr/lib/libopencv_objdetect.so /usr/lib/libopencv_photo.so /usr/lib/libopencv_stitching.so /usr/lib/libopencv_ts.so /usr/lib/libopencv_video.so /usr/lib/libopencv_videostab.so -lwebsockets -laul -lecore_evas -lecore -leina -levas -lecore_wayland -lelementary -lm -leet -lecore_file -ledje -lethumb_client -lecore_imf -lecore_con -lglib-2.0 -lwayland-client -lwayland-cursor -lwayland-egl -lwayland-server -lewebkit2 -lcairo -lGLESv2 -lEGL -lpangocairo-1.0 -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgdk_pixbuf-2.0 -lgthread-2.0
+
+#ico_app_samplenavi_CFLAGS = -Wall -I. -I/usr/include/opencv -I/usr/include/ico-appfw -I/usr/include/ecore-1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/eina-1 -I/usr/include/eina-1/eina -I/usr/include/evas-1 -I/usr/include/eet-1 -I/usr/include/pixman-1 -I/usr/include/harfbuzz -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/libdrm -I/usr/include/elementary-1 -I/usr/include/ethumb-1 -I/usr/include/efreet-1 -I/usr/include/e_dbus-1 -I/usr/include/emotion-1 -I/usr/include/edje-1 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/embryo-1 -I/usr/include/ewebkit2-0 -I/usr/include/ewebkit2-0/WebKit2 -I/usr/include/ewebkit2-0/NPAPI -I/usr/include/cairo -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/gdk-pixbuf-2.0
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief definition header file for sample navigation application
+ *
+ * @date Apr-25-2013
+ */
+
+#ifndef SAMPLENAVI_DEFINE_H_
+#define SAMPLENAVI_DEFINE_H_
+
+/* FUNCTION SELECT */
+//#define _USE_CAMERA_
+//#define _USE_OPENCV_ //USE
+//#define _E3D_H_OUTPUT_PRINT_
+
+#define _SHOW_FPS_
+#define _USE_Z_LIMIT_FIX_
+
+
+/* Default data (for samplenavi.conf) */
+#define DEF_USB_CAMERA_ID (0)
+#define DEF_LANDMARK_POSITION (-80)
+#define DEF_LANDMARK_ROTATION (90)
+
+
+/* for 3D Layer */
+#define ROUTE_PLANE_HEIGHT (-190)
+#define ROUTE_PLANE_WIDTH (100)
+
+#define FRONT_SIDE_Z (-190)
+#define Z0_POSITION (0)
+#define FOCUS_LENGTH (512)
+
+#define Z_LIMIT (-150)
+#define COORD_CONVERT_COEFFICIENT (20)
+
+#define CULLING_LENGTH_LANDMARKS (5000)
+#define CULLING_LENGTH_ROUTE (20000)
+
+#define GOAL_MESSAGE_LENGTH (3500)
+
+
+/* For route point */
+#define MAX_DRAW_ROUTE_POINTS (500)
+#define ROUTE_DIVISION_NUMBER (10)
+#define BOX_FIXED_LENGTH (150)
+
+/* For Landmarks */
+#define MAX_LANDMARK_POINTS (1000)
+#define LANDMARK_WIDTH (100)
+
+/* Timers */
+#define TIME_INTERVAL_CAMERA (0.10)
+//#define TIME_INTERVAL_AR (0.05)
+//#define TIME_INTERVAL_AR (0.033)
+#define TIME_INTERVAL_AR (0.066)
+#define TIME_INTERVAL_MAP (1.0)
+
+
+/* Window Size */
+#define W_WIDTH (1920)
+#define W_HEIGHT (1080-64) // StatusBar window height:64
+
+#define W_NAVI_HEIGHT (480)
+#define W_MAP_HEIGHT (536)
+
+#define W_NAVI_ORIGINE_X (0)
+#define W_NAVI_ORIGINE_Y (0)
+
+#define W_MAP_ORIGINE_X (0)
+#define W_MAP_ORIGINE_Y (480)
+
+#define W_TEXTAREA_X (0)
+#define W_TEXTAREA_Y (416)
+#define W_TEXTAREA_HEIGHT (64)
+#define W_TEXTAREA_WIDTH (W_WIDTH)
+
+#define W_NAVIBUTTON_HEIGHT (44)
+#define W_NAVIBUTTON_WIDTH (146)
+#define W_NAVIBUTTON_X (W_WIDTH - 10 - W_NAVIBUTTON_WIDTH)
+#define W_NAVIBUTTON_Y (W_TEXTAREA_Y + 10)
+
+#define W_GOALMESSAGE_HEIGHT (50)
+#define W_GOALMESSAGE_WIDTH (478)
+#define W_GOALMESSAGE_X (150)
+#define W_GOALMESSAGE_Y (283)
+
+#define W_ADDRESS_HEIGHT (50)
+#define W_ADDRESS_WIDTH (570)
+#define W_ADDRESS_X (32)
+#define W_ADDRESS_Y (437)
+
+#define MAX_ROUTE_POINTS (500)
+#define LON_CONVERT (90550.8)
+#define LAT_CONVERT (111240)
+
+/* Directory */
+#define RESOURCE_DIR "/opt/apps/org.tizen.ico.app-samplenavi/res"
+#define IMAGES_DIR "/opt/apps/org.tizen.ico.app-samplenavi/res/images"
+
+/* Common */
+#define TRUE (1)
+#define FALSE (0)
+
+/* Layer */
+#define LAYER_CAMERA (0)
+#define LAYER_ROUTE (5)
+#define LAYER_LANDMARK (10)
+#define LAYER_MAP (30)
+#define LAYER_UI (30)
+
+/* Resources */
+static const char *config_path = RESOURCE_DIR "/samplenavi.conf";
+
+static const char *setting_button_path = IMAGES_DIR "/na_bt3_off.png";
+
+static const char *goal_img_path = IMAGES_DIR "/na_goal.png";
+static const char *goal_text_img_path = IMAGES_DIR "/na_goal_text.png";
+
+static const char *landmark_img_path_0 = IMAGES_DIR "/sg_m_01.png";
+static const char *landmark_img_path_1 = IMAGES_DIR "/sg_m_02.png";
+static const char *landmark_img_path_2 = IMAGES_DIR "/sg_m_03.png";
+static const char *landmark_img_path_3 = IMAGES_DIR "/sg_m_04.png";
+static const char *landmark_img_path_4 = IMAGES_DIR "/sg_m_05.png";
+static const char *landmark_img_path_5 = IMAGES_DIR "/sg_m_06.png";
+static const char *landmark_img_path_6 = IMAGES_DIR "/sg_m_07.png";
+static const char *landmark_img_path_7 = IMAGES_DIR "/sg_m_08.png";
+static const char *landmark_img_path_8 = IMAGES_DIR "/sg_l_01.png";
+static const char *landmark_img_path_9 = IMAGES_DIR "/sg_l_02.png";
+static const char *landmark_img_path_10 = IMAGES_DIR "/sg_l_03.png";
+static const char *landmark_img_path_11 = IMAGES_DIR "/sg_l_04.png";
+static const char *landmark_img_path_12 = IMAGES_DIR "/sg_l_05.png";
+static const char *landmark_img_path_13 = IMAGES_DIR "/sg_l_06.png";
+static const char *landmark_img_path_14 = IMAGES_DIR "/sg_l_07.png";
+static const char *landmark_img_path_15 = IMAGES_DIR "/sg_l_08.png";
+static const char *csv_landmark_path = RESOURCE_DIR "/landmark.csv";
+
+static const char *default_url = "file:///opt/apps/org.tizen.ico.app-samplenavi/res/Map/map.html";
+
+#endif /* SAMPLENAVI_DEFINE_H_ */
+
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief library which displays 3D field of view
+ *
+ * @date Apr-25-2013
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "samplenavi.h"
+#include "e3d.h"
+#include "ico_apf_log.h"
+
+/*============================================================================*/
+/* Define fixed parameters */
+/*============================================================================*/
+/* Get route from websocket */
+#define ROUTE_START_TAG "<route>"
+#define ROUTE_END_TAG "</route>"
+#define BR_TAG "<BR>"
+
+/*============================================================================*/
+/* Define data types */
+/*============================================================================*/
+/* Landmark Points and Cubes */
+typedef struct _PointLength {
+ int index;
+ double length;
+ int drawable;
+} PointLength;
+
+/*============================================================================*/
+/* Function prototype for static(internal) functions */
+/*============================================================================*/
+static void load_route_from_websocket(char *p_in, size_t len);
+
+/* Local Functions for Route. */
+static void calc_route_coord_from_lonlat();
+
+/* Local Functions for Landmark. */
+static void load_landmarks_from_csv();
+static void calc_landmarks_coord_from_lonlat();
+
+void init_e3d(Evas *e3d, void *p_in, size_t len);
+
+/* Landmark Points and Cubes */
+static const char *landmark_img_path(int i);
+
+void e3d_cleanup();
+void calc_route_distance_to_camera();
+void check_route_drawable_by_distance_to_camera();
+double calc_square_length(Point p0, Point p1);
+int length_comp(const void *pl0, const void *pl1);
+
+/* Local Functions for Drawing on Evas */
+Plane *_plane_new(Evas *e3d, Evas_Coord w, Evas_Coord d, Evas_Coord h);
+void _plane_draw(Plane *plane);
+void _plane_free(Plane *plane);
+Cube *_cube_new(Evas *e3d, Evas_Coord w, Evas_Coord h, Evas_Coord d, const char *img_path);
+void _cube_draw(Cube *c, Evas_Coord x, Evas_Coord y, Evas_Coord z, double dx, double dy, double dz);
+void _cube_free(Cube *c);
+void goal_object_new(Evas *e3d);
+void goal_object_draw();
+void goal_object_free();
+
+/* Local Functions for Route. */
+void calc_route_coord_by_camera();
+void check_route_darawable_by_z_limit_fix();
+void draw_route(Evas *e3d);
+double calc_length(Point p0, Point p1);
+void calc_route_distance();
+void rotate_xz(Point src, Point *dist, double angle);
+void calc_base_box_points(int routenum);
+void calc_base_box_points_all();
+void calc_intersection(Point p0, Point p1, Point p2, Point p3, Point *point);
+void calc_bezier_points(Point p0, Point p1, Point p2, Point *points);
+void draw_curve(int routenum);
+Point calc_fix_point(int routenum, int point_index);
+void calc_fixed_box_points(int routenum);
+void calc_fixed_box_points_all();
+
+/* Local Functions for Landmark. */
+void calc_landmarks_coord_by_camera();
+void draw_landmark(Evas *e3d);
+
+/*============================================================================*/
+/* Tables and Valiables */
+/*============================================================================*/
+Camera camera;
+CameraGeocode camera_geocode;
+MapPos map_pos;
+char set_route;
+char enable_navi;
+#ifdef _SHOW_FPS_
+int polygon_count;
+#endif
+
+/* Route Points and Planes*/
+int route_data_count;
+CsvRoute csv_route[MAX_ROUTE_POINTS];
+Point route_raw[MAX_DRAW_ROUTE_POINTS];
+Point route[MAX_DRAW_ROUTE_POINTS];
+double route_square_length_camera[MAX_DRAW_ROUTE_POINTS];
+#ifdef _USE_Z_LIMIT_FIX_
+Point route_pre_fix[MAX_DRAW_ROUTE_POINTS];
+#endif
+Plane *base_plane[MAX_DRAW_ROUTE_POINTS - 1];
+Plane *fixed_plane[MAX_DRAW_ROUTE_POINTS - 1];
+Plane *division_plane[MAX_DRAW_ROUTE_POINTS - 2][ROUTE_DIVISION_NUMBER];
+int route_draw_num;
+double route_distance[MAX_DRAW_ROUTE_POINTS - 1];
+Evas_Object *goal_object;
+
+/* Landmark Points and Cubes */
+int landmark_data_count;
+CsvLandmark csv_landmark[MAX_LANDMARK_POINTS];
+Point landmark_raw[MAX_LANDMARK_POINTS];
+Point landmark[MAX_LANDMARK_POINTS];
+Cube *landmark_cube[MAX_LANDMARK_POINTS];
+
+/*============================================================================*/
+/* functions */
+/*============================================================================*/
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief load_route_from_websocket
+ * route information acquisition.
+ *
+ * @param[in] p_in receive message
+ * @param[in] len message size[BYTE]
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+load_route_from_websocket(char *p_in, size_t len)
+{
+ /* Local variable */
+ size_t index = 0;
+ char str[256];
+ route_data_count = 0;
+
+ /* Get string */
+ while( index < len ) {
+ /* Get start tag */
+ if( ( strlen( &p_in[index] ) >= strlen( ROUTE_START_TAG ) ) &&
+ ( strncmp( &p_in[index], ROUTE_START_TAG, strlen( ROUTE_START_TAG ) ) == 0 ) )
+ {
+ index += strlen( ROUTE_START_TAG );
+ }
+ /* Get end tag */
+ else if( ( strlen( &p_in[index] ) >= strlen( ROUTE_END_TAG ) ) &&
+ ( strncmp( &p_in[index], ROUTE_START_TAG, strlen( ROUTE_END_TAG ) ) == 0 ) )
+ {
+ break;
+ }
+ /* Get br tag */
+ else if( ( strlen( &p_in[index] ) >= strlen( BR_TAG ) ) &&
+ ( strncmp( &p_in[index], BR_TAG, strlen( BR_TAG ) ) == 0 ) )
+ {
+ index += strlen( BR_TAG );
+ }
+ /* Get parameter */
+ else {
+ /* Get lng */
+ memset( str, 0, sizeof( str ) );
+ while( ( p_in[index] != ',' ) && ( index < len ) ) {
+ str[strlen( str )] = p_in[index];
+ index++;
+ }
+ csv_route[route_data_count].lon = atof( str );
+ index++;
+
+ /* Get lat */
+ memset( str, 0, sizeof( str ) );
+ while( ( p_in[index] != '<' ) && ( index < len ) ) {
+ str[strlen( str )] = p_in[index];
+ index++;
+ }
+ csv_route[route_data_count].lat = atof( str );
+ route_data_count++;
+ }
+ }
+ if(route_data_count > 0){
+ route_data_count--;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief calc_route_coord_from_lonlat
+ * The coordinates of a route are calculated from
+ * latitude and longitude.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+calc_route_coord_from_lonlat()
+{
+ int i;
+
+ for (i = 0; i < route_data_count; i++) {
+ double x = (csv_route[i].lon - csv_route[0].lon) * LON_CONVERT * COORD_CONVERT_COEFFICIENT;
+ double z = (csv_route[i].lat - csv_route[0].lat) * LAT_CONVERT * COORD_CONVERT_COEFFICIENT;
+ POINT(route_raw[i], x, ROUTE_PLANE_HEIGHT, z, 0, 0);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief load_landmarks_from_csv
+ * The information on a landmark is loaded from a CSV file.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+load_landmarks_from_csv()
+{
+ FILE *fp;
+ int i;
+
+ if ((fp = fopen(csv_landmark_path, "r")) == NULL) {
+ fprintf(stderr, "%s\n", "Error : can't open file.(landmark.csv)\n");
+ landmark_data_count = 0;
+ return;
+ }
+
+ i = 0;
+ while(fscanf(fp, "%lf,%lf,%hhd",
+ &csv_landmark[i].lon, &csv_landmark[i].lat, &csv_landmark[i].id) != EOF) {
+ i++;
+ }
+ landmark_data_count = i;
+
+ fclose(fp);
+
+ // for test
+ for (i = 0; i < landmark_data_count; i++) {
+ uim_debug("landmark data %d : %.4f, %.4f, %d\n",
+ i, csv_landmark[i].lon, csv_landmark[i].lat, csv_landmark[i].id);
+ }
+
+ uim_debug("landmark data read. count = %d\n", landmark_data_count);
+
+ return;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief calc_landmarks_coord_from_lonlat
+ * The coordinates of a landmark are calculated from
+ * latitude and longitude.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void calc_landmarks_coord_from_lonlat()
+{
+ int i;
+
+ for (i = 0; i < landmark_data_count; i++) {
+ double x = (csv_landmark[i].lon - csv_route[0].lon) * LON_CONVERT * COORD_CONVERT_COEFFICIENT;
+ double z = (csv_landmark[i].lat - csv_route[0].lat) * LAT_CONVERT * COORD_CONVERT_COEFFICIENT;
+ POINT(landmark_raw[i], x, conf_data[LANDMARK_POSITION], z, 0, 0);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief load_route_from_websocket
+ * route information acquisition.
+ *
+ * @param[in] e3d 3D view Evas object
+ * @param[in] p_in receive message
+ * @param[in] len message size[BYTE]
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+void
+init_e3d( Evas *e3d, void *p_in, size_t len )
+{
+ int i, j;
+
+ goal_square_length = 1000000000000000.0;
+
+ /***********************
+ * Route Initialize *
+ ***********************/
+
+ /* load route data */
+ load_route_from_websocket( (char *)p_in, len );
+
+ calc_route_coord_from_lonlat();
+ route_draw_num = route_data_count;
+
+ for (i = 0; i < route_draw_num - 1; i++) {
+ base_plane[i] = _plane_new(e3d, 100, 400, 170);
+ fixed_plane[i] = _plane_new(e3d, 100, 400, 170);
+ }
+ for (i = 0; i < route_draw_num - 2; i++) {
+ for (j = 0; j < ROUTE_DIVISION_NUMBER; j++) {
+ division_plane[i][j] = _plane_new(e3d, 10, 10, 10);
+ }
+ }
+
+ goal_object_new(e3d);
+
+#ifndef _USE_Z_LIMIT_FIX_
+ calc_route_distance();
+#endif
+
+ calc_route_coord_by_camera();
+ calc_base_box_points_all();
+ calc_fixed_box_points_all();
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("Base Plane point0 = %f, %f, %f \n", base_plane[0]->pt[0].x,
+ base_plane[0]->pt[0].y, base_plane[0]->pt[0].z);
+ uim_debug("Base Plane point1 = %f, %f, %f \n", base_plane[0]->pt[1].x,
+ base_plane[0]->pt[1].y, base_plane[0]->pt[1].z);
+ uim_debug("Base Plane point2 = %f, %f, %f \n", base_plane[0]->pt[2].x,
+ base_plane[0]->pt[2].y, base_plane[0]->pt[2].z);
+ uim_debug("Base Plane point3 = %f, %f, %f \n", base_plane[0]->pt[3].x,
+ base_plane[0]->pt[3].y, base_plane[0]->pt[3].z);
+#endif
+
+ /***********************
+ * Landmark Initialize *
+ ***********************/
+
+ /* load landmark data */
+ load_landmarks_from_csv();
+ calc_landmarks_coord_from_lonlat();
+
+ for (i = 0; i < landmark_data_count; i++) {
+ landmark_cube[i] = _cube_new(e3d, LANDMARK_WIDTH, (LANDMARK_WIDTH / 3) * 4, LANDMARK_WIDTH,
+ landmark_img_path(csv_landmark[i].id));
+ }
+
+/*****************************************************************************/
+
+ // for test
+ uim_debug("Route CSV x = %f, z = %f\n", csv_route[1].lon, csv_route[1].lat);
+ uim_debug("Route x = %f, z = %f\n", route_raw[1].x, route_raw[1].z);
+ uim_debug("Landmark CSV x = %f, z = %f\n", csv_landmark[0].lon, csv_landmark[0].lat);
+ uim_debug("Landmark x = %f, z = %f\n", landmark_raw[0].x, landmark_raw[0].z);
+
+ /***********************
+ * Camera Initialize *
+ ***********************/
+ _camera_pos(0, 0, 0, 0);
+ camera_geocode.lon = csv_route[0].lon;
+ camera_geocode.lat = csv_route[0].lat;
+ camera_geocode.dir = 0;
+ calc_camera_coord();
+
+ /***********************
+ * Map present location Initialize *
+ ***********************/
+ map_pos.lon = csv_route[0].lon;
+ map_pos.lat = csv_route[0].lat;
+
+ /* draw e3d */
+ draw_route(e3d);
+ draw_landmark(e3d);
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief landmark_img_path
+ * Image file path acquisition of a landmark.
+ *
+ * @param[in] i landmark image file path identifier
+ * @return file path address
+ * @retval > 0 success
+ * @retval NULL error
+ */
+/*--------------------------------------------------------------------------*/
+static const char *
+landmark_img_path(int i)
+{
+ const char *img_path;
+ switch (i) {
+ case 0:
+ img_path = landmark_img_path_0;
+ break;
+ case 1:
+ img_path = landmark_img_path_1;
+ break;
+ case 2:
+ img_path = landmark_img_path_2;
+ break;
+ case 3:
+ img_path = landmark_img_path_3;
+ break;
+ case 4:
+ img_path = landmark_img_path_4;
+ break;
+ case 5:
+ img_path = landmark_img_path_5;
+ break;
+ case 6:
+ img_path = landmark_img_path_6;
+ break;
+ case 7:
+ img_path = landmark_img_path_7;
+ break;
+ case 8:
+ img_path = landmark_img_path_8;
+ break;
+ case 9:
+ img_path = landmark_img_path_9;
+ break;
+ case 10:
+ img_path = landmark_img_path_10;
+ break;
+ case 11:
+ img_path = landmark_img_path_11;
+ break;
+ case 12:
+ img_path = landmark_img_path_12;
+ break;
+ case 13:
+ img_path = landmark_img_path_13;
+ break;
+ case 14:
+ img_path = landmark_img_path_14;
+ break;
+ case 15:
+ img_path = landmark_img_path_15;
+ break;
+ }
+ return img_path;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief e3d_cleanup
+ * The information on a landmark is loaded from a CSV file.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+void
+e3d_cleanup()
+{
+ int i, j;
+
+ for (i = 0; i < route_draw_num - 1; i++) {
+ _plane_free(base_plane[i]);
+ _plane_free(fixed_plane[i]);
+ }
+
+ for (i = 0; i < route_draw_num - 2; i++) {
+ for (j = 0; j < ROUTE_DIVISION_NUMBER; j++) {
+ _plane_free(division_plane[i][j]);
+ }
+ }
+
+ for (i = 0; i < landmark_data_count; i++) {
+ _cube_free(landmark_cube[i]);
+ }
+
+ goal_object_free();
+}
+
+void draw_route(Evas *e3d) {
+ int i;
+ int j;
+
+#ifdef _SHOW_FPS_
+ polygon_count = 0;
+#endif
+
+ calc_route_coord_by_camera();
+ calc_base_box_points_all();
+ calc_fixed_box_points_all();
+
+// ----------------------------------------------------------------------------
+
+ if (enable_navi == FALSE || set_route == FALSE) {
+ evas_object_hide(goal_object);
+ return;
+ }
+
+ for (i = 0; i < route_draw_num - 1; i++) {
+ if (fixed_plane[i]->drawable == TRUE) {
+ _plane_draw(fixed_plane[i]);
+ } else {
+ evas_object_hide(fixed_plane[i]->o);
+ }
+ }
+
+ /* curve draw */
+ for (i = 0; i < route_draw_num - 2; i++) {
+ if (fixed_plane[i]->drawable == TRUE) {
+ draw_curve(i);
+ } else {
+ for (j = 0; j < ROUTE_DIVISION_NUMBER; j++) {
+ evas_object_hide(division_plane[i][j]->o);
+ }
+ }
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("curve draw. \n");
+#endif
+ }
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("route draw comp.\n");
+#endif
+
+ goal_object_draw(fixed_plane[route_draw_num - 2]);
+
+}
+
+void draw_landmark(Evas *e3d) {
+ static unsigned long frame_count = 0;
+ PointLength draw_order[landmark_data_count];
+ int i, j, k;
+ Point camera_coord;
+ int landmark_angle;
+ double culling_length;
+
+ if (enable_navi == FALSE) {
+ for (i = 0; i < landmark_data_count; i++) {
+ for (j = 0; j < 6; j++) {
+ evas_object_hide(landmark_cube[i]->side[j].o);
+ }
+ }
+ return;
+ }
+ calc_landmarks_coord_by_camera();
+
+ camera_coord.x = camera.x;
+ camera_coord.z = camera.z;
+
+ /* calc landmark rotation */
+ landmark_angle = (int)((conf_data[LANDMARK_ROTATION] / (1.0 / TIME_INTERVAL_AR)) * frame_count) % 360;
+
+ culling_length = CULLING_LENGTH_LANDMARKS * CULLING_LENGTH_LANDMARKS;
+
+ /* In order to draw from distant landmark. */
+ for (i = 0; i < landmark_data_count; i++) {
+ draw_order[i].index = i;
+ draw_order[i].length = calc_square_length(landmark[i], camera_coord);
+
+ /* for culling */
+ if (culling_length < draw_order[i].length) {
+ draw_order[i].drawable = FALSE;
+ } else {
+ draw_order[i].drawable = TRUE;
+ }
+ }
+
+ qsort(draw_order, landmark_data_count, sizeof(PointLength), length_comp);
+
+ for (i = 0; i < landmark_data_count; i++) {
+ j = draw_order[i].index;
+ if (draw_order[i].drawable == TRUE) {
+ _cube_draw(landmark_cube[j], landmark[j].x, landmark[j].y, landmark[j].z,
+ 0, landmark_angle, 0);
+ } else {
+ for (k = 0; k < 6; k++) {
+ evas_object_hide(landmark_cube[j]->side[k].o);
+ }
+ }
+ }
+
+ frame_count++;
+}
+
+void
+_camera_pos(Evas_Coord x, Evas_Coord y, Evas_Coord z, double angle)
+{
+ // uim_debug("camera_pos x:%d y:%d z:%d angle:%d", x, y, z, angle);
+ camera.x = x;
+ camera.y = y;
+ camera.z = z;
+ camera.angle = angle;
+}
+
+void _camera_move(double speed, double angle) {
+ double x, y, z;
+ double rad;
+
+ rad = (-angle) * M_PI / 180.0;
+
+ x = camera.x + speed * sin(rad);
+ y = camera.y;
+ z = camera.z + speed * cos(rad);
+
+ _camera_pos(x, y, z, angle);
+}
+
+void calc_camera_coord() {
+ double x, z;
+
+ x = (camera_geocode.lon - csv_route[0].lon) * LON_CONVERT * COORD_CONVERT_COEFFICIENT;
+ z = (camera_geocode.lat - csv_route[0].lat) * LAT_CONVERT * COORD_CONVERT_COEFFICIENT;
+
+ _camera_pos(x, camera.y, z, (360.0 - (double)camera_geocode.dir));
+
+}
+
+/******************************************************************************
+ * Functions for Drawing on Evas
+ ******************************************************************************/
+Plane* _plane_new(Evas *e3d, Evas_Coord w, Evas_Coord d, Evas_Coord h)
+{
+ Plane *plane;
+ Evas_Object *o;
+
+ plane = calloc(1, sizeof(Plane));
+
+ /* origin point */
+ w -= (w / 2);
+
+ o = evas_object_rectangle_add(e3d);
+ plane->o = o;
+
+ evas_object_resize(o, 256, 256);
+ evas_object_hide(o);
+
+ SIDE_POINT(0, -w, -h, d, 0, 0);
+ SIDE_POINT(1, w, -h, d, 256, 0);
+ SIDE_POINT(2, w, -h, -d, 256, 256);
+ SIDE_POINT(3, -w, -h, -d, 0, 256);
+
+ evas_object_layer_set(o, LAYER_ROUTE);
+
+ plane->drawable = TRUE;
+
+ return plane;
+}
+
+void _plane_draw(Plane *plane) {
+ static Evas_Map *m2 = NULL;
+ int i;
+
+ Evas_Coord fix_z[4];
+
+ if (!m2) m2 = evas_map_new(4);
+ evas_map_smooth_set(m2, 0);
+
+#ifdef _USE_Z_LIMIT_FIX_
+ if(plane->drawable == FALSE) {
+ evas_object_hide(plane->o);
+ return;
+ }
+#endif
+
+ evas_object_color_set(plane->o, 51, 178, 0, 179);
+
+ /* set points */
+ evas_map_point_coord_set(m2, 0, (Evas_Coord)(plane->pt[0].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[0].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[0].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m2, 1, (Evas_Coord)(plane->pt[1].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[1].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[1].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m2, 2, (Evas_Coord)(plane->pt[2].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[2].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[2].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m2, 3, (Evas_Coord)(plane->pt[3].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[3].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[3].z + FRONT_SIDE_Z));
+
+ for (i = 0; i < 4; i++) {
+ evas_map_point_image_uv_set(m2, i, plane->pt[i].u, plane->pt[i].v);
+ evas_map_point_color_set(m2, i, 255, 255, 255, 255);
+ }
+ evas_map_util_3d_perspective(m2, (W_WIDTH / 2), (W_NAVI_HEIGHT / 2) - 100,
+ Z0_POSITION, FOCUS_LENGTH);
+
+ evas_object_map_enable_set(plane->o, 1);
+ evas_object_map_set(plane->o, m2);
+
+ evas_object_show(plane->o);
+
+#ifdef _SHOW_FPS_
+ polygon_count++;
+#endif
+
+}
+
+void _plane_free(Plane *plane) {
+ evas_object_del(plane->o);
+ free(plane);
+}
+
+Cube *_cube_new(Evas *e3d, Evas_Coord w, Evas_Coord h, Evas_Coord d, const char *img_path) {
+ Cube *c;
+ int i;
+
+ w -= (w / 2);
+ h -= (h / 2);
+ d -= (d / 2);
+ c = calloc(1, sizeof(Cube));
+ for (i = 0; i < 6; i++)
+ {
+ Evas_Object *o;
+ switch (i) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ o = evas_object_image_add(e3d);
+ c->side[i].o = o;
+ evas_object_image_file_set(o, img_path, NULL);
+ evas_object_image_fill_set(o, 0, 0, 256, 256);
+ evas_object_resize(o, 256, 256);
+ evas_object_image_smooth_scale_set(o, 0);
+ evas_object_show(o);
+ evas_object_layer_set(o, LAYER_LANDMARK);
+ break;
+ case 4:
+ case 5:
+ o = evas_object_rectangle_add(e3d);
+ c->side[i].o = o;
+ evas_object_color_set(o, 0, 34, 119, 255);
+ evas_object_resize(o, 256, 256);
+ evas_object_show(o);
+ evas_object_layer_set(o, LAYER_LANDMARK);
+ break;
+ }
+ }
+ // First Plane (Front)
+ CUBE_POINT(0, 0, -w, -h, -d, 0, 0);
+ CUBE_POINT(0, 1, w, -h, -d, 600, 0);
+ CUBE_POINT(0, 2, w, h, -d, 600, 800);
+ CUBE_POINT(0, 3, -w, h, -d, 0, 800);
+
+ // Second Plane (Right side)
+ CUBE_POINT(1, 0, w, -h, -d, 0, 0);
+ CUBE_POINT(1, 1, w, -h, d, 600, 0);
+ CUBE_POINT(1, 2, w, h, d, 600, 800);
+ CUBE_POINT(1, 3, w, h, -d, 0, 800);
+
+ // Third Plane (Back)
+ CUBE_POINT(2, 0, w, -h, d, 0, 0);
+ CUBE_POINT(2, 1, -w, -h, d, 600, 0);
+ CUBE_POINT(2, 2, -w, h, d, 600, 800);
+ CUBE_POINT(2, 3, w, h, d, 0, 800);
+
+ // Fourth Plane (Left side)
+ CUBE_POINT(3, 0, -w, -h, d, 0, 0);
+ CUBE_POINT(3, 1, -w, -h, -d, 600, 0);
+ CUBE_POINT(3, 2, -w, h, -d, 600, 800);
+ CUBE_POINT(3, 3, -w, h, d, 0, 800);
+
+ // Fifth Plane (Top side)
+ CUBE_POINT(4, 0, -w, -h, d, 0, 0);
+ CUBE_POINT(4, 1, w, -h, d, 256, 0);
+ CUBE_POINT(4, 2, w, -h, -d, 256, 256);
+ CUBE_POINT(4, 3, -w, -h, -d, 0, 256);
+
+ // Sixth Plane (Under side)
+ CUBE_POINT(5, 0, -w, h, -d, 0, 0);
+ CUBE_POINT(5, 1, w, h, -d, 256, 0);
+ CUBE_POINT(5, 2, w, h, d, 256, 256);
+ CUBE_POINT(5, 3, -w, h, d, 0, 256);
+
+ return c;
+}
+
+void _cube_draw(Cube *c, Evas_Coord x, Evas_Coord y, Evas_Coord z,
+ double dx, double dy, double dz)
+{
+ static Evas_Map *m = NULL;
+ int i, j, k, order[6], sorted, drawable, tmp_z;
+ Evas_Coord mz[6];
+
+ drawable = TRUE;
+
+ // only 4 point
+ if (!m) m = evas_map_new(4);
+ // smooth rendering disable
+ evas_map_smooth_set(m, 0);
+
+ for (i = 0; i < 6; i++)
+ {
+ Evas_Coord tz[4];
+
+ for (j = 0; j < 4; j++)
+ {
+
+ evas_map_point_coord_set(m, j,
+ c->side[i].pt[j].x + ((W_WIDTH) / 2) + x - camera.x,
+ c->side[i].pt[j].y + ((W_NAVI_HEIGHT) / 2) + y - camera.y,
+ c->side[i].pt[j].z + z - camera.z + FRONT_SIDE_Z);
+ if ( !(i == 4 || i == 5)) {
+ evas_map_point_image_uv_set(m, j,
+ c->side[i].pt[j].u,
+ c->side[i].pt[j].v);
+ }
+ evas_map_point_color_set(m, j, 255, 255, 255, 255);
+ }
+ evas_map_util_3d_rotate(m, dx, dy, dz,
+ (W_WIDTH / 2) + x - camera.x, (W_NAVI_HEIGHT / 2) + y - camera.y, z - camera.z + FRONT_SIDE_Z);
+
+ // for camera angle
+ evas_map_util_3d_rotate(m, 0, -camera.angle, 0,
+ (W_WIDTH / 2), (W_NAVI_HEIGHT / 2), FRONT_SIDE_Z);
+
+ evas_map_util_3d_perspective(m, (W_WIDTH / 2), (W_NAVI_HEIGHT / 2) , Z0_POSITION, FOCUS_LENGTH);
+
+#ifdef _USE_Z_LIMIT_FIX_
+ for (j = 0; j < 4; j++) {
+ evas_map_point_coord_get(m, j, NULL, NULL, &tmp_z);
+ if (tmp_z < (Z_LIMIT + FRONT_SIDE_Z)) {
+ drawable = FALSE;
+ }
+ }
+#endif
+ if (evas_map_util_clockwise_get(m))
+ {
+ evas_object_map_enable_set(c->side[i].o, 1);
+ evas_object_map_set(c->side[i].o, m);
+#ifdef _USE_Z_LIMIT_FIX_
+ if (drawable == TRUE) {
+#endif
+ evas_object_show(c->side[i].o);
+#ifdef _SHOW_FPS_
+ polygon_count++;
+#endif
+#ifdef _USE_Z_LIMIT_FIX_
+ } else {
+ evas_object_hide(c->side[i].o);
+ }
+#endif
+ }
+ else {
+ evas_object_hide(c->side[i].o);
+ }
+
+ order[i] = i;
+
+ for (j = 0; j < 4; j++) {
+ evas_map_point_coord_get(m, j, NULL, NULL, &(tz[j]));
+ }
+
+ mz[i] = (tz[0] + tz[1] + tz[2] + tz[3]) / 4;
+
+ if (mz[i] < -512) {
+ evas_object_hide(c->side[i].o);
+ }
+ }
+
+ // sort by z
+ sorted = 0;
+ do
+ {
+ sorted = 1;
+ for (i = 0; i < 5; i++)
+ {
+ if (mz[order[i]] > mz[order[i + 1]])
+ {
+ j = order[i];
+ order[i] = order[i + 1];
+ order[i + 1] = j;
+ sorted = 0;
+ }
+ }
+ }
+ while (!sorted);
+
+ evas_object_raise(c->side[order[0]].o);
+
+ for (i = 1; i < 6; i++) {
+ evas_object_stack_below(c->side[order[i]].o, c->side[order[i - 1]].o);
+ }
+}
+
+void _cube_free(Cube *c)
+{
+ int i;
+
+ for (i = 0; i < 6; i++) evas_object_del(c->side[i].o);
+ free(c);
+}
+
+void goal_object_new(Evas *e3d) {
+ goal_object = evas_object_image_add(e3d);
+ evas_object_image_file_set(goal_object, goal_img_path, NULL);
+ evas_object_image_fill_set(goal_object, 0, 0, 600, 600);
+
+ evas_object_resize(goal_object, 256, 256);
+ evas_object_image_smooth_scale_set(goal_object, 0);
+ evas_object_hide(goal_object);
+}
+
+void goal_object_draw(Plane *plane) {
+ static Evas_Map *m3 = NULL;
+ int i;
+
+ if (plane->drawable == FALSE) {
+ evas_object_hide(goal_object);
+ return;
+ }
+
+ if (!m3) m3 = evas_map_new(4);
+ evas_map_smooth_set(m3, 0);
+
+ evas_map_point_coord_set(m3, 0, (Evas_Coord)(plane->pt[0].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[0].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[0].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m3, 1, (Evas_Coord)(plane->pt[0].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)((-1) * plane->pt[0].y + (W_NAVI_HEIGHT) / 2), (Evas_Coord)(plane->pt[0].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m3, 2,(Evas_Coord)(plane->pt[3].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)((-1) * plane->pt[3].y + (W_NAVI_HEIGHT) / 2), (Evas_Coord)(plane->pt[3].z + FRONT_SIDE_Z));
+ evas_map_point_coord_set(m3, 3, (Evas_Coord)(plane->pt[3].x + ((W_WIDTH) / 2)),
+ (Evas_Coord)(plane->pt[3].y + ((W_NAVI_HEIGHT) / 2)), (Evas_Coord)(plane->pt[3].z + FRONT_SIDE_Z));
+
+ evas_map_point_image_uv_set(m3, 0, 600, 0);
+ evas_map_point_image_uv_set(m3, 1, 600, 600);
+ evas_map_point_image_uv_set(m3, 2, 0, 600);
+ evas_map_point_image_uv_set(m3, 3, 0, 0);
+
+ evas_map_util_3d_perspective(m3, (W_WIDTH / 2), (W_NAVI_HEIGHT / 2) - 100,
+ Z0_POSITION, FOCUS_LENGTH);
+
+ evas_object_map_enable_set(goal_object, 1);
+ evas_object_map_set(goal_object, m3);
+ evas_object_show(goal_object);
+
+ evas_object_raise(goal_object);
+}
+
+void goal_object_free() {
+ evas_object_del(goal_object);
+}
+
+
+/******************************************************************************
+ * Functions for Calculate Route Points
+ ******************************************************************************/
+
+#ifdef _USE_Z_LIMIT_FIX_
+void check_route_darawable_by_z_limit_fix() {
+ int i;
+ Point limit_p0, limit_p1;
+
+ POINT(limit_p0, -100, ROUTE_PLANE_HEIGHT, Z_LIMIT, 0, 0);
+ POINT(limit_p1, 100, ROUTE_PLANE_HEIGHT, Z_LIMIT, 0, 0);
+
+ for (i = 0; i < route_draw_num - 1; i++) {
+ route[i].status = NONE;
+ route[i].enable_fix = TRUE;
+
+ if (route_pre_fix[i].z < Z_LIMIT) {
+ route[i].status = STARTING_POINT;
+ route[i].enable_fix = FALSE;
+ if (route_pre_fix[i+1].z >= Z_LIMIT) {
+ calc_intersection(limit_p0, limit_p1, route_pre_fix[i], route_pre_fix[i+1], &route[i]);
+ } else {
+ if (!(i > 0 && (route[i-1].status == ENDING_POINT))) {
+ route[i].status = BOTH_POINT;
+ route[i].x = route_pre_fix[i].x;
+ route[i].z = route_pre_fix[i].z;
+ }
+ }
+ } else {
+ // don't fix
+ route[i].x = route_pre_fix[i].x;
+ route[i].z = route_pre_fix[i].z;
+
+ if (route_pre_fix[i].z < 0) {
+ if (i > 0 && (fixed_plane[i - 1]->drawable == FALSE)) {
+ route[i].enable_fix = FALSE;
+ }
+ }
+ }
+
+ if (route_pre_fix[i+1].z < Z_LIMIT) {
+ if ((route[i].status == STARTING_POINT) || (route[i].status == BOTH_POINT)) {
+ route[i].status = BOTH_POINT;
+
+ if ((i+1) == route_draw_num - 1) {
+ route[i+1].x = route_pre_fix[i+1].x;
+ route[i+1].z = route_pre_fix[i+1].z;
+ } else {
+ if (route_pre_fix[i+2].z >= Z_LIMIT) {
+ calc_intersection(limit_p0, limit_p1, route_pre_fix[i+1], route_pre_fix[i+2], &route[i+1]);
+
+ } else {
+ route[i+1].x = route_pre_fix[i+1].x;
+ route[i+1].z = route_pre_fix[i+1].z;
+ }
+ }
+
+ if ((i < route_draw_num - 1) && (route_pre_fix[i+2].z > Z_LIMIT)) {
+ calc_intersection(limit_p0, limit_p1, route_pre_fix[i+1], route_pre_fix[i+2], &route[i+1]);
+ } else {
+ route[i+1].x = route_pre_fix[i+1].x;
+ route[i+1].z = route_pre_fix[i+1].z;
+ }
+ } else {
+ if (route_pre_fix[i].z >= Z_LIMIT) {
+ route[i].status = ENDING_POINT;
+ calc_intersection(limit_p0, limit_p1, route_pre_fix[i], route_pre_fix[i+1], &route[i+1]);
+ } else {
+ route[i].status = BOTH_POINT;
+ }
+ }
+ } else {
+ route[i+1].x = route_pre_fix[i+1].x;
+ route[i+1].z = route_pre_fix[i+1].z;
+ }
+
+ if (route[i].status == BOTH_POINT) {
+ fixed_plane[i]->drawable = FALSE;
+ } else {
+ fixed_plane[i]->drawable = TRUE;
+ }
+
+ }
+
+
+}
+#endif
+
+void calc_route_coord_by_camera() {
+ int i;
+ Point orizin;
+
+ for (i = 0; i < route_draw_num; i++) {
+#ifdef _USE_Z_LIMIT_FIX_
+ route_pre_fix[i].x = route_raw[i].x - camera.x;
+ route_pre_fix[i].z = route_raw[i].z - camera.z;
+ rotate_xz(route_pre_fix[i], &route_pre_fix[i], camera.angle);
+
+#else
+ route[i].x = route_raw[i].x - camera.x;
+ route[i].z = route_raw[i].z - camera.z;
+ rotate_xz(route[i], &route[i], camera.angle);
+
+#endif
+ }
+
+ orizin.x = 0;
+ orizin.y = 0;
+#ifdef _USE_Z_LIMIT_FIX_
+ goal_square_length = calc_square_length(orizin, route_pre_fix[route_draw_num - 1]);
+#else
+ goal_square_length = calc_square_length(orizin, route[route_draw_num - 1]);
+#endif
+
+ for (i = 0; i < route_draw_num - 1; i++) {
+ fixed_plane[i]->drawable = TRUE;
+ }
+
+#ifdef _USE_Z_LIMIT_FIX_
+ check_route_darawable_by_z_limit_fix();
+#endif
+
+ calc_route_distance();
+ calc_route_distance_to_camera();
+ check_route_drawable_by_distance_to_camera();
+}
+
+void calc_route_distance_to_camera() {
+ int i;
+ Point origin;
+
+ origin.x = 0;
+ origin.z = 0;
+
+ for ( i = 0; i < route_draw_num; i++) {
+ route_square_length_camera[i] = calc_square_length(route[i], origin);
+ }
+
+}
+
+void check_route_drawable_by_distance_to_camera() {
+ int i, culling_route_count;
+ double culling_length;
+
+ culling_route_count = 0;
+ culling_length = CULLING_LENGTH_ROUTE * CULLING_LENGTH_ROUTE;
+
+ for ( i = 0; i < route_draw_num - 1; i++) {
+ if ((route_square_length_camera[i] > culling_length) &&
+ (route_square_length_camera[i+1] > culling_length)) {
+ fixed_plane[i]->drawable = FALSE;
+ culling_route_count++;
+ }
+ }
+
+}
+
+void calc_fixed_box_points_all() {
+ int i;
+ for (i = 0; i < route_draw_num - 1; i++) {
+ calc_fixed_box_points(i);
+ }
+}
+
+void calc_fixed_box_points(int routenum) {
+#ifdef _USE_Z_LIMIT_FIX_
+ if (routenum == 0 || route[routenum].enable_fix == FALSE) {
+#else
+ if (routenum == 0) {
+#endif
+ fixed_plane[routenum]->pt[1] = base_plane[routenum]->pt[1];
+ fixed_plane[routenum]->pt[2] = base_plane[routenum]->pt[2];
+ } else {
+ fixed_plane[routenum]->pt[1] = calc_fix_point(routenum, 1);
+ fixed_plane[routenum]->pt[2] = calc_fix_point(routenum, 2);
+ }
+
+#ifdef _USE_Z_LIMIT_FIX_
+ if (routenum == route_draw_num - 2 || (route[routenum].status == ENDING_POINT || route[routenum].status == BOTH_POINT)) {
+#else
+ if (routenum == route_draw_num - 2) {
+#endif
+ fixed_plane[routenum]->pt[0] = base_plane[routenum]->pt[0];
+ fixed_plane[routenum]->pt[3] = base_plane[routenum]->pt[3];
+ } else {
+ fixed_plane[routenum]->pt[0] = calc_fix_point(routenum, 0);
+ fixed_plane[routenum]->pt[3] = calc_fix_point(routenum, 3);
+ }
+}
+
+Point calc_fix_point(int routenum, int point_index) {
+ double m;
+ Point result, p0, p1;
+
+ if (route_distance[routenum] > (BOX_FIXED_LENGTH * 2)) {
+ m = (route_distance[routenum] - BOX_FIXED_LENGTH) / route_distance[routenum];
+ } else {
+ m = 0.5;
+ }
+
+
+ POINT(result, 0, ROUTE_PLANE_HEIGHT, 0, 0, 0);
+ POINT(p0, 0, ROUTE_PLANE_HEIGHT, 0, 0, 0);
+ POINT(p1, base_plane[routenum]->pt[point_index].x, ROUTE_PLANE_HEIGHT, base_plane[routenum]->pt[point_index].z, 0, 0);
+
+ if (point_index == 0) {
+ p0.x = base_plane[routenum]->pt[1].x;
+ p0.z = base_plane[routenum]->pt[1].z;
+ } else if (point_index == 1) {
+ p0.x = base_plane[routenum]->pt[0].x;
+ p0.z = base_plane[routenum]->pt[0].z;
+ } else if (point_index == 2) {
+ p0.x = base_plane[routenum]->pt[3].x;
+ p0.z = base_plane[routenum]->pt[3].z;
+ } else {
+ p0.x = base_plane[routenum]->pt[2].x;
+ p0.z = base_plane[routenum]->pt[2].z;
+ }
+
+ result.x = (m * (p1.x - p0.x)) + p0.x;
+ result.z = (m * (p1.z - p0.z)) + p0.z;
+
+ return result;
+}
+
+void draw_curve(int routenum) {
+ int i;
+
+ Point con_point1;
+ Point con_point2;
+ Point curve_point1[ROUTE_DIVISION_NUMBER+1];
+ Point curve_point2[ROUTE_DIVISION_NUMBER+1];
+
+ calc_intersection(base_plane[routenum]->pt[0], base_plane[routenum]->pt[1],
+ base_plane[routenum+1]->pt[0], base_plane[routenum+1]->pt[1], &con_point1);
+ calc_intersection(base_plane[routenum]->pt[3], base_plane[routenum]->pt[2],
+ base_plane[routenum+1]->pt[3], base_plane[routenum+1]->pt[2], &con_point2);
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("con_point1 x = %f, z = %f \n", con_point1.x, con_point1.z);
+ uim_debug("con_point2 x = %f, z = %f \n", con_point2.x, con_point2.z);
+#endif
+
+ calc_bezier_points(fixed_plane[routenum]->pt[0], con_point1, fixed_plane[routenum+1]->pt[1], curve_point1);
+ calc_bezier_points(fixed_plane[routenum]->pt[3], con_point2, fixed_plane[routenum+1]->pt[2], curve_point2);
+
+ for (i = 0; i < (ROUTE_DIVISION_NUMBER) + 1 ;i++) {
+ if (curve_point1[i].z < Z_LIMIT) {
+ curve_point1[i].z = Z_LIMIT;
+ }
+ if (curve_point2[i].z < Z_LIMIT) {
+ curve_point2[i].z = Z_LIMIT;
+ }
+ }
+
+ for (i = 0; i < ROUTE_DIVISION_NUMBER; i++) {
+ PLANE_POINT(division_plane[routenum][i], 0, curve_point1[i+1].x, ROUTE_PLANE_HEIGHT, curve_point1[i+1].z, 0, 0);
+ PLANE_POINT(division_plane[routenum][i], 1, curve_point1[i].x, ROUTE_PLANE_HEIGHT, curve_point1[i].z, 256, 0);
+ PLANE_POINT(division_plane[routenum][i], 2, curve_point2[i].x, ROUTE_PLANE_HEIGHT, curve_point2[i].z, 256, 256);
+ PLANE_POINT(division_plane[routenum][i], 3, curve_point2[i+1].x, ROUTE_PLANE_HEIGHT, curve_point2[i+1].z, 0, 256);
+
+ _plane_draw(division_plane[routenum][i]);
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("Division Plane %d : x0 = %f, z0 = %f, x1 = %f, z1 = %f, x2 = %f, z2 = %f, x3 = %f, z3 = %f\n",
+ routenum, division_plane[routenum][i]->pt[0].x, division_plane[routenum][i]->pt[0].z,
+ division_plane[routenum][i]->pt[1].x, division_plane[routenum][i]->pt[1].z,
+ division_plane[routenum][i]->pt[2].x, division_plane[routenum][i]->pt[2].z,
+ division_plane[routenum][i]->pt[3].x, division_plane[routenum][i]->pt[3].z);
+ uim_debug("Draw division plane.\n");
+#endif
+
+ }
+}
+
+
+void calc_bezier_points(Point p0, Point p1, Point p2, Point *points) {
+ int i;
+ double a, b, x, z;
+ Point p;
+
+ for(i = 0; i < ROUTE_DIVISION_NUMBER + 1; i++) {
+ b = (double)i / ROUTE_DIVISION_NUMBER;
+ a = 1 - b;
+
+ x = a * a * p0.x + 2 * a * b * p1.x + b * b * p2.x;
+ z = a * a * p0.z + 2 * a * b * p1.z + b * b * p2.z;
+
+ POINT(p, x, ROUTE_PLANE_HEIGHT, z, 0, 0);
+ points[i] = p;
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("bezier_points %d : x = %f, y = %f, z = %f\n", i, points[i].x, points[i].y, points[i].z);
+#endif
+ }
+}
+
+void calc_base_box_points_all() {
+ int i;
+ for (i = 0; i < route_draw_num - 1; i++) {
+ calc_base_box_points(i);
+ }
+
+}
+
+void calc_base_box_points(int routenum) {
+ /* Determine the angle. */
+ double th = atan2((route[routenum+1].z - route[routenum].z),
+ (route[routenum+1].x - route[routenum].x));
+ /* Determine the distance. */
+ double dis = route_distance[routenum];
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("th = %f\n", (th*180/M_PI));
+#endif
+
+ PLANE_POINT(base_plane[routenum], 0,
+ (cos(th)*dis - sin(th)*(-ROUTE_PLANE_WIDTH)) + route[routenum].x,
+ ROUTE_PLANE_HEIGHT,
+ (sin(th)*dis + cos(th)*(-ROUTE_PLANE_WIDTH)) + route[routenum].z, 0, 0);
+
+ PLANE_POINT(base_plane[routenum], 1,
+ (cos(th)*0 - sin(th)*(-ROUTE_PLANE_WIDTH)) + route[routenum].x,
+ ROUTE_PLANE_HEIGHT,
+ (sin(th)*0 + cos(th)*(-ROUTE_PLANE_WIDTH)) + route[routenum].z, 256, 0);
+
+ PLANE_POINT(base_plane[routenum], 2,
+ (cos(th)*0 - sin(th)*(ROUTE_PLANE_WIDTH)) + route[routenum].x,
+ ROUTE_PLANE_HEIGHT,
+ (sin(th)*0 + cos(th)*(ROUTE_PLANE_WIDTH)) + route[routenum].z, 256, 256);
+
+ PLANE_POINT(base_plane[routenum], 3,
+ (cos(th)*dis - sin(th)*(ROUTE_PLANE_WIDTH)) + route[routenum].x,
+ ROUTE_PLANE_HEIGHT,
+ (sin(th)*dis + cos(th)*(ROUTE_PLANE_WIDTH)) + route[routenum].z, 0, 256);
+
+#ifdef _E3D_H_OUTPUT_PRINT_
+ uim_debug("Plane %d : x0 = %f, z0 = %f, x1 = %f, z1 = %f, x2 = %f, z2 = %f, x3 = %f, z3 = %f\n",
+ routenum, base_plane[routenum]->pt[0].x, base_plane[routenum]->pt[0].z,
+ base_plane[routenum]->pt[1].x, base_plane[routenum]->pt[1].z,
+ base_plane[routenum]->pt[2].x, base_plane[routenum]->pt[2].z,
+ base_plane[routenum]->pt[3].x, base_plane[routenum]->pt[3].z);
+#endif
+}
+
+/******************************************************************************
+ * Functions for Calculate Landmark Points
+ ******************************************************************************/
+void calc_landmarks_coord_by_camera() {
+ int i;
+
+ for (i = 0; i < landmark_data_count; i++) {
+ landmark[i].x = landmark_raw[i].x;
+ landmark[i].y = landmark_raw[i].y;
+ landmark[i].z = landmark_raw[i].z;
+ }
+
+}
+
+/******************************************************************************
+ * Functions for Calculate (Common)
+ ******************************************************************************/
+void calc_route_distance() {
+ int i;
+ for (i = 0; i < route_draw_num - 1; i++) {
+ route_distance[i] = calc_length(route[i], route[i+1]);
+ }
+}
+
+/** Calculate the distance between two points.(only x-z plane) */
+double calc_length(Point p0, Point p1) {
+ return sqrt( (p1.x - p0.x) * (p1.x - p0.x) + (p1.z - p0.z) * (p1.z - p0.z) );
+}
+
+/** Calculate the square of distance between two points.(only x-z plane) */
+double calc_square_length(Point p0, Point p1) {
+ return ((p1.x - p0.x) * (p1.x - p0.x) + (p1.z - p0.z) * (p1.z - p0.z));
+}
+
+/* rotate point (center is orizin, xz-plane) */
+void rotate_xz(Point src, Point *dist, double angle) {
+ double rx, rz, sine, cosine;
+ double rad;
+
+ rad = (-angle) * M_PI / 180.0;
+
+ sine = sin(rad);
+ cosine = cos(rad);
+
+ rx = cosine * src.x - sine * src.z;
+ rz = sine * src.x + cosine * src.z;
+
+ dist->x = rx;
+ dist->y = src.y;
+ dist->z = rz;
+ dist->u = src.u;
+ dist->v = src.v;
+}
+
+void calc_intersection(Point p0, Point p1, Point p2, Point p3, Point *point) {
+ double S1, S2, result_x, result_z;
+ S1 = ((p2.x - p3.x) * (p1.z - p3.z) - (p2.z - p3.z) * (p1.x - p3.x))/2;
+ S2 = ((p2.x - p3.x) * (p3.z - p0.z) - (p2.z - p3.z) * (p3.x - p0.x))/2;
+
+ result_x = (p1.x + (p0.x - p1.x) * S1 / (S1 + S2));
+ result_z = (p1.z + (p0.z - p1.z) * S1 / (S1 + S2));
+
+ point->x = result_x;
+ point->y = ROUTE_PLANE_HEIGHT;
+ point->z = result_z;
+ point->u = 0;
+ point->v = 0;
+}
+
+int length_comp(const void *pl0, const void *pl1) {
+ PointLength point_length0 = *(PointLength *)pl0;
+ PointLength point_length1 = *(PointLength *)pl1;
+
+ if (point_length0.length == point_length1.length) {
+ return 0;
+ } else if (point_length0.length < point_length1.length) {
+ return 1;
+ }
+ return -1;
+}
+
+
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief header file oflibrary which displays 3D field of view
+ *
+ * @date Apr-25-2013
+ */
+
+#ifndef SAMPLENAVI_E3D_H_
+#define SAMPLENAVI_E3D_H_
+
+#include <Ecore_Evas.h>
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include "define.h"
+#include "samplenavi.h"
+
+double goal_square_length;
+
+/* Functions */
+void draw_route(Evas *e3d);
+void init_e3d( Evas *e3d, void *p_in, size_t len );
+void e3d_cleanup();
+
+void _camera_pos(Evas_Coord x, Evas_Coord y, Evas_Coord z, double angle);
+void _camera_move(double speed, double angle);
+void calc_camera_coord();
+
+#ifdef _USE_Z_LIMIT_FIX_
+enum Check_Route {
+ NONE,
+ STARTING_POINT, // FIXED Z_LIMIT START POINT
+ ENDING_POINT, // FIXED Z_LIMIT END POINT
+ BOTH_POINT // FIXED Z_LIMIT START/END POINT
+};
+#endif
+
+/* Structs */
+typedef struct _CsvRoute {
+ double lon;
+ double lat;
+} CsvRoute;
+
+typedef struct _CsvLandmark {
+ double lon;
+ double lat;
+ char id;
+} CsvLandmark;
+
+typedef struct _Point
+{
+ double x, y, z, u, v;
+#ifdef _USE_Z_LIMIT_FIX_
+ enum Check_Route status;
+ char enable_fix;
+#endif
+} Point;
+
+typedef struct _Plane
+{
+ Evas_Object *o;
+ Point pt[4];
+ int drawable;
+} Plane;
+
+typedef struct _Cube
+{
+ Plane side[6];
+ double angle;
+} Cube;
+
+/* Camera Positions */
+typedef struct _Camera
+{
+ Evas_Coord x, y, z;
+ double angle;
+} Camera;
+
+typedef struct _CameraGeocode
+{
+ double lat, lon;
+ int dir;
+} CameraGeocode;
+
+typedef struct _MapPos
+{
+ double lat;
+ double lon;
+ int dir;
+} MapPos;
+
+/* Extern */
+extern Camera camera;
+extern CameraGeocode camera_geocode;
+extern MapPos map_pos;
+extern char set_route;
+extern char enable_navi;
+#ifdef _SHOW_FPS_
+extern int polygon_count;
+#endif
+
+/* Macros */
+#define POINT(point, xx, yy, zz, uu, vv) \
+ point.x = xx; \
+ point.y = yy; \
+ point.z = zz; \
+ point.u = uu; \
+ point.v = vv
+
+#define PLANE_POINT(plane, i, xx, yy, zz, uu, vv) \
+ plane->pt[i].x = xx; \
+ plane->pt[i].y = yy; \
+ plane->pt[i].z = zz; \
+ plane->pt[i].u = uu; \
+ plane->pt[i].v = vv
+
+#define SIDE_POINT(p, xx, yy, zz, uu, vv) \
+ plane->pt[p].x = xx; \
+ plane->pt[p].y = yy; \
+ plane->pt[p].z = zz; \
+ plane->pt[p].u = uu; \
+ plane->pt[p].v = vv
+
+#define CUBE_POINT(n, p, xx, yy, zz, uu, vv) \
+ c->side[n].pt[p].x = xx; \
+ c->side[n].pt[p].y = yy; \
+ c->side[n].pt[p].z = zz; \
+ c->side[n].pt[p].u = uu; \
+ c->side[n].pt[p].v = vv
+
+
+#endif /* SAMPLENAVI_E3D_H_ */
+
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief sample navigation application main
+ *
+ * @date Apr-25-2013
+ */
+
+#include "define.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <time.h>
+#include <stddef.h>
+#include <getopt.h>
+#include <dbus/dbus.h>
+#include <libwebsockets.h>
+#include <EWebKit2.h>
+#include <Eina.h>
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+#include <Elementary.h>
+#include "samplenavi.h"
+#include "e3d.h"
+#include "ico_apf.h"
+#include "ico_apf_ecore.h"
+#include "ico_apf_log.h"
+
+#ifdef _USE_OPENCV_
+#include <highgui.h>
+#endif
+
+
+/* DEBUG.s */
+//#define TEST_TIME 0.001
+//#define TEST_TIME 0.066
+#define TEST_TIME 0.5
+
+//#define DEBUG_METER_TEXT_DSP
+
+//#define DEBUG_VIC_INFO_SET
+#ifdef DEBUG_VIC_INFO_SET
+extern int route_data_count;
+extern CsvRoute csv_route[MAX_ROUTE_POINTS];
+static double test_lat = 35.47945;
+static double test_lon = 139.40026;
+static int test_cnt = 0;
+#endif
+/* DEBUG.e */
+
+/*============================================================================*/
+/* Define fixed parameters */
+/*============================================================================*/
+/* AMB */
+#define CONFIG_FILE "/opt/apps/org.tizen.ico.app-samplenavi/res/config.txt"
+#define DBUS_SERVICE "org.automotive.message.broker"
+#define DBUS_INTERFACE "org.freedesktop.DBus.Properties"
+#define DBUS_METHOD "Get"
+#define MAX_PARA_NUM 4 /* Lat,Lon,Dir,VicSpeed */
+#define LATITUDE 0
+#define LONGITUDE 1
+#define DIRECTION 2
+#define VEHICLESPEED 3
+
+/* Setting screen */
+#define ICO_APP_BUF_SIZE (1024)
+
+/*============================================================================*/
+/* Define data types */
+/*============================================================================*/
+/* AMB */
+union VicVal_t{
+ dbus_int32_t i32_val;
+ dbus_int32_t i16_val;
+ dbus_uint32_t u32_val;
+ dbus_uint16_t u16_val;
+ uint8_t byte_val;
+ dbus_bool_t b_val;
+ double d_val;
+ char *s_val;
+};
+
+struct vic_data_t{
+ int property;
+ char name[32];
+ char path_name[64];
+ char interface_name[64];
+ char property_name[32];
+};
+
+struct vic_key_data_t{
+ int id;
+ char name[32];
+};
+
+/*============================================================================*/
+/* Function prototype for static(internal) functions */
+/*============================================================================*/
+static double get_time();
+static void set_default_data();
+static void load_config_file();
+static void e_ui_draw();
+static void e_ui_init();
+static void e_map_init();
+static void e_map_draw();
+#ifdef _USE_OPENCV_
+static void convert_data_evas_cv(Evas_Object *eo, IplImage *iplimage);
+static void evas_object_image_from_cv(Evas_Object *eo, const char* filepath);
+#endif
+static Eina_Bool _time_interval_navi_cb(void *cam);
+static Eina_Bool _time_interval_map_renew_cb(void *data);
+static Eina_Bool callback_listener(void *data);
+static int callback_http(
+ struct libwebsocket_context *context, struct libwebsocket *wsi,
+ enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len);
+static bool parse_elementary_value(
+ union VicVal_t *vic_val_p, DBusMessageIter *iter);
+static bool parse_value(union VicVal_t *vic_val_p, DBusMessageIter *iter);
+static int getAmbDbus(int key, union VicVal_t *vic_val_p);
+static void getLocationFromAmb();
+static int get_config();
+static char* edje_parse_str(void *in, int arg_num);
+static void event_message(struct libwebsocket *wsi, char *format, ...);
+static void _touch_up_edje(
+ void *data, Evas *evas , Evas_Object *obj, void *event_info);
+static int loading_edje_file(const char *edje_file);
+static void res_callback(
+ ico_apf_resource_notify_info_t* info, void *user_data);
+
+/*============================================================================*/
+/* Tables and Valiables */
+/*============================================================================*/
+int conf_data[CONF_DATA_MAX];
+
+/* Screen right */
+static char sscrntype[32];
+
+/* Setting screen */
+static Evas *g_evas;
+static Eina_List *g_img_list = NULL;
+static Evas_Object *g_edje; /* loaded edje objects */
+static unsigned char edje_str[ICO_APP_BUF_SIZE];
+
+/* Meter Display */
+static int ui_vicspeed = 0;
+static Evas_Object *ui_vicspeed_text;
+static Evas_Object *ui_meter_l;
+static Evas_Object *ui_meter_c[10];
+static Evas_Object *ui_meter_r[10];
+static int fig_l = 0;
+static int fig_c = 0;
+static int fig_r = 0;
+
+const static char *meter_l_path = {
+IMAGES_DIR "/Meter/Meters_SpeedNum_1l.png"};
+
+const static char *meter_c_path[10] = {
+IMAGES_DIR "/Meter/Meters_SpeedNum_0c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_1c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_2c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_3c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_4c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_5c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_6c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_7c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_8c.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_9c.png"};
+
+const static char *meter_r_path[10] = {
+IMAGES_DIR "/Meter/Meters_SpeedNum_0r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_1r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_2r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_3r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_4r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_5r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_6r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_7r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_8r.png",
+IMAGES_DIR "/Meter/Meters_SpeedNum_9r.png"};
+
+/* AMB */
+static DBusConnection *g_connection = NULL; /* D-Bus Connection */
+static int property_num = 0;
+const static char Bus_name[] = DBUS_SERVICE;
+static struct vic_data_t vic_data[MAX_PARA_NUM];
+
+const struct vic_key_data_t vic_key_data[]={
+{ LATITUDE, "Latitude" },
+{ LONGITUDE, "Longitude" },
+{ DIRECTION, "Direction" },
+{ VEHICLESPEED, "VehicleSpeed"},
+{ -1, "END" }};
+
+/* BASE */
+static Ecore_Evas *window;
+static Evas *e_cam;
+static Evas *e_3d;
+static Evas *e_ui;
+static Evas *e_map;
+
+#ifdef _USE_OPENCV_
+IplImage *captureImage;
+static CvCapture *capture;
+#endif
+
+Evas_Object *cam;
+
+Evas_Object *ui_bg;
+Evas_Object *ui_btn;
+Evas_Object *ui_goal_text;
+Evas_Object *ui_address;
+
+#ifdef _SHOW_FPS_
+Evas_Object *ui_fps;
+Evas_Object *ui_fps_bg;
+Evas_Object *ui_polygon_count;
+Evas_Object *ui_polygon_count_bg;
+double fps;
+#endif
+
+Evas_Object *browser;
+
+/* CAMERA */
+static const char *test_map_path = IMAGES_DIR "/test_map2.png";
+static const char *test_camera_path = IMAGES_DIR "/test_cameraview.png";
+
+/* WEBSOCKET */
+static int event_type = 0;
+static int connected = 0;
+static struct libwebsocket *socket_val = NULL;
+static struct libwebsocket_context *context;
+static struct libwebsocket_protocols protocols[] = {
+ {
+ "http-only", // name
+ callback_http, // callback
+ 0 // per_session_data_size
+ },
+ {
+ NULL, NULL, 0
+ }
+};
+
+static int port = 50414;
+static char addr[16] = "127.0.0.1";
+static char proxy_uri[512] = "";
+
+/*============================================================================*/
+/* functions */
+/*============================================================================*/
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief get_time
+ * Time acquisition(second).
+ *
+ * @param none
+ * @return time(second)
+ */
+/*--------------------------------------------------------------------------*/
+static double
+get_time()
+{
+ struct timeval sec_timeofday;
+ gettimeofday(&sec_timeofday, NULL);
+ return ((sec_timeofday.tv_sec) +
+ (sec_timeofday.tv_usec / 1000000.0));
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief set_default_data
+ * Set Default data without define in conf file.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+set_default_data()
+{
+ int i;
+
+ for (i = 0; i < CONF_DATA_MAX; i++) {
+ if (conf_data[i] == 0) {
+ switch (i) {
+ case USB_CAMERA_ID:
+ conf_data[USB_CAMERA_ID] = DEF_USB_CAMERA_ID;
+ break;
+ case LANDMARK_POSITION:
+ conf_data[LANDMARK_POSITION] = DEF_LANDMARK_POSITION;
+ break;
+ case LANDMARK_ROTATION:
+ conf_data[LANDMARK_ROTATION] = DEF_LANDMARK_ROTATION;
+ break;
+ }
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief load_config_file
+ * A config file is loaded.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+load_config_file()
+{
+ FILE *fp;
+ char str[512];
+ char *valuestr;
+ int i = 0;
+
+ for (i = 0; i < CONF_DATA_MAX; i++) {
+ conf_data[i] = 0;
+ }
+
+ if ((fp = fopen(config_path, "r")) == NULL) {
+ fprintf(stderr, "%s\n", "Error : can't open file.(samplenavi.conf)\n");
+ set_default_data();
+ // TODO for test
+ uim_debug("USB_CAMERA_ID = %d", conf_data[USB_CAMERA_ID]);
+ uim_debug("LANDMARK_POSITION = %d", conf_data[LANDMARK_POSITION]);
+ uim_debug("LANDMARK_ROTATION = %d", conf_data[LANDMARK_ROTATION]);
+ return;
+ }
+
+ while (fscanf(fp, "%s", str) != EOF) {
+ if (strncmp(str, "USBCAMERAID", 11) == 0) {
+ valuestr = strtok((char *)(str) + 12, "=");
+ if(valuestr != NULL)
+ {
+ conf_data[USB_CAMERA_ID] = atoi(valuestr);
+ }
+ } else if (strncmp(str, "LANDMARKPOSITION", 16) == 0) {
+ valuestr = strtok((char *)(str) + 17, "=");
+ if(valuestr != NULL)
+ {
+ conf_data[LANDMARK_POSITION] = atoi(valuestr);
+ }
+ } else if (strncmp(str, "LANDMARKROTATION", 16) == 0) {
+ valuestr = strtok((char *)(str) + 17, "=");
+ if(valuestr != NULL)
+ {
+ conf_data[LANDMARK_ROTATION] = atoi(valuestr);
+ }
+ } else if (strncmp(str, "WEBSOCKETPORT", 13) == 0) {
+ valuestr = strtok((char *)(str) + 14, "=");
+ if(valuestr != NULL)
+ {
+ port = atoi(valuestr);
+ }
+ } else if (strncmp(str, "IPADDR", 6) == 0) {
+ valuestr = strtok((char *)(str) + 7, "=");
+ if(valuestr != NULL)
+ {
+ strcpy( addr, valuestr);
+ }
+ } else if (strncmp(str, "PROXYURI", 8) == 0) {
+ valuestr = strtok((char *)(str) + 9, "=");
+ if(valuestr != NULL)
+ {
+ strcpy( proxy_uri, valuestr);
+ }
+ }
+ }
+
+ fclose(fp);
+
+ set_default_data();
+
+ // TODO for test
+ uim_debug("USB_CAMERA_ID = %d", conf_data[USB_CAMERA_ID]);
+ uim_debug("LANDMARK_POSITION = %d", conf_data[LANDMARK_POSITION]);
+ uim_debug("LANDMARK_ROTATION = %d", conf_data[LANDMARK_ROTATION]);
+ uim_debug("WEBSOKET_PORT = %d", port);
+ uim_debug("IP_ADDR = %s", addr);
+ uim_debug("PROXY_URI = %s", proxy_uri);
+
+ return;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief e_ui_draw
+ * Draw UI Layer.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+e_ui_draw()
+{
+#ifdef _SHOW_FPS_
+ char str[15];
+#endif
+
+/* Meter */
+ int value = 0;
+ int w_fig_r = 0;
+ int w_fig_c = 0;
+ int w_fig_l = 0;
+
+ evas_object_show(ui_bg);
+ evas_object_show(ui_btn);
+
+/* Meter */
+#ifdef DEBUG_METER_TEXT_DSP
+ sprintf(str, "[kph] %d", ui_vicspeed);
+ evas_object_text_text_set(ui_vicspeed_text, str);
+ evas_object_show(ui_vicspeed_text);
+#else
+ evas_object_show(ui_vicspeed_text);
+ value = ui_vicspeed;
+ if(value > 199)
+ {
+ uim_debug("MAX SPEED OVER [%d]",value);
+ value = 199;
+ }
+
+ w_fig_r = (value % 10); value /= 10;
+ w_fig_c = (value % 10); value /= 10;
+ w_fig_l = (value % 10); value /= 10;
+
+ if(w_fig_r != fig_r)
+ {
+ evas_object_hide(ui_meter_r[fig_r]);
+ evas_object_show(ui_meter_r[w_fig_r]);
+ fig_r = w_fig_r;
+ }
+
+ if(w_fig_c != fig_c)
+ {
+ evas_object_hide(ui_meter_c[fig_c]);
+
+ if(w_fig_c != 0 || w_fig_l == 1)
+ {
+ evas_object_show(ui_meter_c[w_fig_c]);
+ }
+
+ fig_c = w_fig_c;
+ }
+
+ if(w_fig_l != fig_l)
+ {
+ evas_object_hide(ui_meter_l);
+
+ if(w_fig_l != 0)
+ {
+ evas_object_show(ui_meter_l);
+ }
+
+ fig_l = w_fig_l;
+ }
+#endif
+ if (enable_navi == TRUE && set_route == TRUE) {
+ if (goal_square_length <= (GOAL_MESSAGE_LENGTH * GOAL_MESSAGE_LENGTH)) {
+ evas_object_show(ui_goal_text);
+ } else {
+ evas_object_hide(ui_goal_text);
+ }
+ }
+
+#ifdef _SHOW_FPS_
+ sprintf(str, "FPS : %.2f", fps);
+ evas_object_text_text_set(ui_fps, str);
+ sprintf(str, "Polygon : %d", polygon_count);
+ evas_object_text_text_set(ui_polygon_count, str);
+#endif
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief e_ui_init
+ * Initialize UI Layer.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+e_ui_init()
+{
+#ifdef _SHOW_FPS_
+ char str[15];
+#endif
+ int i = 0;
+
+ ui_bg = evas_object_rectangle_add(e_ui);
+ evas_object_color_set(ui_bg, 0, 34, 119, 255);
+ evas_object_move(ui_bg, W_TEXTAREA_X, W_TEXTAREA_Y);
+ evas_object_resize(ui_bg, W_TEXTAREA_WIDTH, W_TEXTAREA_HEIGHT);
+ evas_object_show(ui_bg);
+ evas_object_layer_set(ui_bg, LAYER_UI);
+
+ ui_btn = evas_object_image_add(e_ui);
+ evas_object_image_file_set(ui_btn, setting_button_path, NULL);
+ evas_object_image_fill_set(ui_btn, 0, 0, W_NAVIBUTTON_WIDTH, W_NAVIBUTTON_HEIGHT);
+ evas_object_move(ui_btn, W_NAVIBUTTON_X, W_NAVIBUTTON_Y);
+ evas_object_resize(ui_btn, W_NAVIBUTTON_WIDTH, W_NAVIBUTTON_HEIGHT);
+ evas_object_show(ui_btn);
+ evas_object_layer_set(ui_btn, LAYER_UI);
+
+ ui_goal_text = evas_object_image_add(e_ui);
+ evas_object_image_file_set(ui_goal_text, goal_text_img_path, NULL);
+ evas_object_image_fill_set(ui_goal_text, 0, 0, W_GOALMESSAGE_WIDTH, W_GOALMESSAGE_HEIGHT);
+ evas_object_move(ui_goal_text, W_GOALMESSAGE_X, W_GOALMESSAGE_Y);
+ evas_object_resize(ui_goal_text, W_GOALMESSAGE_WIDTH, W_GOALMESSAGE_HEIGHT);
+ evas_object_hide(ui_goal_text);
+ evas_object_layer_set(ui_goal_text, LAYER_UI);
+
+/* Meter */
+#ifdef DEBUG_METER_TEXT_DSP
+ ui_vicspeed_text = evas_object_text_add(e_ui);
+ evas_object_text_style_set(ui_vicspeed_text, EVAS_TEXT_STYLE_PLAIN);
+ evas_object_color_set(ui_vicspeed_text, 255, 255, 255, 255);
+ evas_object_text_font_set(ui_vicspeed_text, "Utopia", 28);
+ sprintf(str, "[kph] %d", ui_vicspeed);
+ evas_object_text_text_set(ui_vicspeed_text, str);
+ evas_object_move(ui_vicspeed_text, 0, 430);
+ evas_object_resize(ui_vicspeed_text, W_GOALMESSAGE_WIDTH, W_GOALMESSAGE_HEIGHT);
+// evas_object_hide(ui_vicspeed_text);
+ evas_object_show(ui_vicspeed_text);
+ evas_object_layer_set(ui_vicspeed_text, LAYER_UI);
+#else
+ ui_meter_l = evas_object_image_add(e_ui);
+ evas_object_image_file_set(ui_meter_l, meter_l_path, NULL);
+ evas_object_image_fill_set(ui_meter_l, 0, 0, 300, 320);
+ evas_object_move(ui_meter_l, 0, 300);
+ evas_object_resize(ui_meter_l, 300, 320);
+ evas_object_hide(ui_meter_l);
+ evas_object_layer_set(ui_meter_l, LAYER_UI);
+
+ for(i = 0; i < 10; i++)
+ {
+ ui_meter_c[i] = evas_object_image_add(e_ui);
+ evas_object_image_file_set(ui_meter_c[i], meter_c_path[i], NULL);
+ evas_object_image_fill_set(ui_meter_c[i], 0, 0, 300, 320);
+ evas_object_move(ui_meter_c[i], 0, 300);
+ evas_object_resize(ui_meter_c[i], 300, 320);
+ evas_object_hide(ui_meter_c[i]);
+ evas_object_layer_set(ui_meter_c[i], LAYER_UI);
+
+ ui_meter_r[i] = evas_object_image_add(e_ui);
+ evas_object_image_file_set(ui_meter_r[i], meter_r_path[i], NULL);
+ evas_object_image_fill_set(ui_meter_r[i], 0, 0, 300, 320);
+ evas_object_move(ui_meter_r[i], 0, 300);
+ evas_object_resize(ui_meter_r[i], 300, 320);
+ evas_object_hide(ui_meter_r[i]);
+ evas_object_layer_set(ui_meter_r[i], LAYER_UI);
+ }
+ evas_object_show(ui_meter_r[0]);
+
+ ui_vicspeed_text = evas_object_text_add(e_ui);
+ evas_object_text_style_set(ui_vicspeed_text, EVAS_TEXT_STYLE_PLAIN);
+ evas_object_color_set(ui_vicspeed_text, 255, 255, 255, 255);
+ evas_object_text_font_set(ui_vicspeed_text, "Utopia", 24);
+ evas_object_text_text_set(ui_vicspeed_text, "kph");
+ evas_object_move(ui_vicspeed_text, 180, 440);
+ evas_object_resize(ui_vicspeed_text, W_GOALMESSAGE_WIDTH, W_GOALMESSAGE_HEIGHT);
+// evas_object_hide(ui_vicspeed_text);
+ evas_object_show(ui_vicspeed_text);
+ evas_object_layer_set(ui_vicspeed_text, LAYER_UI);
+#endif
+
+#ifdef _SHOW_FPS_
+ sprintf(str, "FPS : %.2f", fps);
+
+ ui_fps_bg = evas_object_rectangle_add(e_ui);
+ evas_object_color_set(ui_fps_bg, 255, 255, 255, 255);
+ evas_object_move(ui_fps_bg, 0, 0);
+ evas_object_resize(ui_fps_bg, 150, 20);
+ evas_object_show(ui_fps_bg);
+ evas_object_layer_set(ui_fps_bg, LAYER_UI);
+
+ ui_fps = evas_object_text_add(e_ui);
+ evas_object_text_style_set(ui_fps, EVAS_TEXT_STYLE_PLAIN);
+ evas_object_color_set(ui_fps, 0, 0, 0, 255);
+ evas_object_text_font_set(ui_fps, "Utopia", 14);
+ evas_object_text_text_set(ui_fps, str);
+ evas_object_move(ui_fps, 0, 0);
+ evas_object_resize(ui_fps, 250, 250);
+ evas_object_show(ui_fps);
+ evas_object_layer_set(ui_fps, LAYER_UI);
+
+ sprintf(str, "Polygon : %d", polygon_count);
+
+ ui_polygon_count_bg = evas_object_rectangle_add(e_ui);
+ evas_object_color_set(ui_polygon_count_bg, 255, 255, 255, 255);
+ evas_object_move(ui_polygon_count_bg, 0, 20);
+ evas_object_resize(ui_polygon_count_bg, 150, 20);
+ evas_object_show(ui_polygon_count_bg);
+ evas_object_layer_set(ui_polygon_count_bg, LAYER_UI);
+
+ ui_polygon_count = evas_object_text_add(e_ui);
+ evas_object_text_style_set(ui_polygon_count, EVAS_TEXT_STYLE_PLAIN);
+ evas_object_color_set(ui_polygon_count, 0, 0, 0, 255);
+ evas_object_text_font_set(ui_polygon_count, "Utopia", 14);
+ evas_object_text_text_set(ui_polygon_count, str);
+ evas_object_move(ui_polygon_count, 0, 20);
+ evas_object_resize(ui_polygon_count, 250, 250);
+ evas_object_show(ui_polygon_count);
+ evas_object_layer_set(ui_polygon_count, LAYER_UI);
+#endif
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief e_map_init
+ * Initialize MAP Layer.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+e_map_init()
+{
+ e_map = ecore_evas_get(window);
+ browser = ewk_view_add(e_map);
+ ewk_context_proxy_uri_set(ewk_view_context_get(browser), proxy_uri);
+ evas_object_move(browser, W_MAP_ORIGINE_X, W_MAP_ORIGINE_Y);
+ evas_object_resize(browser, W_WIDTH, W_MAP_HEIGHT);
+ evas_object_show(browser);
+ ewk_view_uri_set(browser, default_url);
+ evas_object_layer_set(browser, LAYER_MAP);
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief e_map_draw
+ * Draw Map Layer(EWebKit2)
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+e_map_draw()
+{
+ evas_object_show(browser);
+}
+
+#ifdef _USE_OPENCV_
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief convert_data_evas_cv
+ * Convert IplImage object to Evas_Object.
+ *
+ * @param[out] eo Evas_Object
+ * @param[in] iplimagenone IplImage object
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+convert_data_evas_cv(Evas_Object *eo, IplImage *iplimage)
+{
+ int image_data_size = (iplimage->width) * iplimage->height * 4;
+ unsigned char image[image_data_size];
+ int i = 0;
+
+ if (image_data_size == 0) {
+ uim_debug("convert_data_evas_cv: IplImage empty error.");
+ return;
+ }
+
+ for (i = 0; i < (iplimage->width * iplimage->height); i++) {
+ image[i*4] = iplimage->imageData[(3*i)];
+ image[(i*4)+1] = iplimage->imageData[(3*i)+1];
+ image[(i*4)+2] = iplimage->imageData[(3*i)+2];
+ image[(i*4)+3] = 255;
+ }
+
+ /* convert to Evas_Object */
+ evas_object_image_colorspace_set(eo, EVAS_COLORSPACE_ARGB8888);
+ evas_object_image_size_set(eo, iplimage->width , iplimage->height);
+ evas_object_image_data_set(eo, image);
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief evas_object_image_from_cv
+ * Load the picture to an IplImage object.
+ *
+ * @param[out] eo Evas_Object
+ * @param[in] filepath path of the file
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+evas_object_image_from_cv(Evas_Object *eo, const char* filepath)
+{
+ IplImage *iplimage;
+
+ /* load picture */
+ iplimage = cvLoadImage(filepath, CV_LOAD_IMAGE_COLOR);
+ if (iplimage == 0) {
+ uim_debug("cvLoadImageError.");
+ }
+
+ convert_data_evas_cv(eo, iplimage);
+}
+#endif
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief _time_interval_navi_cb
+ * main timer for navigation.
+ *
+ * @param[out] cam Evas_Object
+ * @return result
+ * @retval ECORE_CALLBACK_RENEW Return value to keep a callback
+ * @retval ECORE_CALLBACK_CANCEL Return value to remove a callback
+ */
+/*--------------------------------------------------------------------------*/
+static Eina_Bool
+_time_interval_navi_cb(void *cam)
+{
+ static double webcam_timer = 0;
+ double carinfo_lat, carinfo_lon;
+ int carinfo_dir;
+
+ /* for calc fps */
+#ifdef _SHOW_FPS_
+ static double total_frame_time = 0;
+ static int frame_count = 0;
+ static double t0;
+ double t1;
+#endif
+
+#ifdef _USE_CAMERA_
+ webcam_timer += TIME_INTERVAL_AR;
+
+ if(webcam_timer >= TIME_INTERVAL_CAMERA) {
+ webcam_timer = 0;
+
+ /* Capture from Camera */
+ cam = evas_object_image_add(e_cam);
+
+ captureImage = cvQueryFrame(capture);
+ convert_data_evas_cv(cam, captureImage);
+
+ evas_object_image_fill_set(cam, 0, 0, W_WIDTH, W_NAVI_HEIGHT);
+ evas_object_move(cam, W_NAVI_ORIGINE_X, W_NAVI_ORIGINE_Y);
+ evas_object_resize(cam, W_WIDTH, W_NAVI_HEIGHT);
+ evas_object_show(cam);
+
+ }
+#else
+ evas_object_image_fill_set(cam, 0, 0, W_WIDTH, W_NAVI_HEIGHT);
+ evas_object_move(cam, W_NAVI_ORIGINE_X, W_NAVI_ORIGINE_Y);
+ evas_object_resize(cam, W_WIDTH, W_NAVI_HEIGHT);
+ evas_object_show(cam);
+#endif
+
+ getLocationFromAmb();
+
+ calc_camera_coord();
+
+ /* render 3D view */
+ draw_route(e_3d);
+ draw_landmark(e_3d);
+
+ /* render UI view */
+ e_ui_draw();
+
+ /* render Map View */
+ e_map_draw();
+
+#ifdef _SHOW_FPS_
+ // Moving Average
+ if(frame_count == 0) {
+ t0 = get_time();
+ frame_count++;
+ } else if (frame_count < 5) {
+ t1 = get_time();
+ total_frame_time += t1 - t0;
+ t0 = t1;
+ frame_count++;
+ } else {
+ t1 = get_time();
+ total_frame_time -= total_frame_time / 4;
+ total_frame_time += t1 - t0;
+ t0 = t1;
+
+ fps = 4.0 * 1.0 / total_frame_time;
+
+ }
+#endif
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief _time_interval_map_renew_cb
+ * timer for renewal of a map.
+ *
+ * @param[out] data user data(UNUSED)
+ * @return result
+ * @retval ECORE_CALLBACK_RENEW Return value to keep a callback
+ * @retval ECORE_CALLBACK_CANCEL Return value to remove a callback
+ */
+/*--------------------------------------------------------------------------*/
+static Eina_Bool
+_time_interval_map_renew_cb(void *data)
+{
+/* DEBUG.s */
+#ifdef DEBUG_VIC_INFO_SET
+ if(test_cnt < route_data_count)
+ {
+ test_lat = csv_route[test_cnt].lat;
+ test_lon = csv_route[test_cnt].lon;
+ camera_geocode.lat = test_lat;
+ camera_geocode.lon = test_lon;
+ test_cnt++ ;
+ }
+#endif
+/* DEBUG.e */
+
+ if((socket_val) && ((map_pos.lat != camera_geocode.lat) || (map_pos.lon != camera_geocode.lon)))
+ {
+ map_pos.lat = camera_geocode.lat;
+ map_pos.lon = camera_geocode.lon;
+
+ uim_debug ("map_pos.lat = [%f]",map_pos.lat);
+ uim_debug ("map_pos.lon = [%f]",map_pos.lon);
+
+ event_message(socket_val, "CHG VAL VIC_INFO LAT %f LON %f", map_pos.lat, map_pos.lon );
+ uim_debug ("SEND LAT LON TO SINARIO(samplenavi)");
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief callback_listener
+ * timer for libwebsocket connection surveillance.
+ *
+ * @param[out] data libwebsocket context
+ * @return result
+ * @retval ECORE_CALLBACK_RENEW Return value to keep a callback
+ * @retval ECORE_CALLBACK_CANCEL Return value to remove a callback
+ */
+/*--------------------------------------------------------------------------*/
+static Eina_Bool
+callback_listener(void *data)
+{
+ if(connected) {
+ libwebsocket_service((struct libwebsocket_context *)data, 0);
+ } else {
+ uim_debug("WEBSOCKET CONNECTED ERROR");
+ if(context != NULL) {
+ libwebsocket_context_destroy(context);
+ }
+ /* Server */
+ context = libwebsocket_create_context(port, NULL,
+ protocols, libwebsocket_internal_extensions,
+ NULL, NULL, -1, -1, 0);
+
+ if(context == NULL) {
+ uim_debug("libwebsocket_create_context failed. (line:%d)", __LINE__);
+ sleep(1);
+ return 0;
+ }
+
+ connected = 1;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief callback_http
+ * this callback function is notified from libwebsockets
+ *
+ * @param[in] context libwebsocket context
+ * @param[in] wsi libwebsockets management table
+ * @param[in] reason event type
+ * @param[in] user intact
+ * @param[in] in receive message
+ * @param[in] len message size[BYTE]
+ * @return result
+ * @retval =0 success
+ * @retval =1 error
+ */
+/*--------------------------------------------------------------------------*/
+static int
+callback_http(struct libwebsocket_context *context, struct libwebsocket *wsi,
+ enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len)
+{
+ int n = 0;
+ unsigned char buf[LWS_SEND_BUFFER_PRE_PADDING + 512 +
+ LWS_SEND_BUFFER_POST_PADDING];
+ unsigned char *p = &buf[LWS_SEND_BUFFER_PRE_PADDING];
+ char data[512];
+
+ // TODO for test
+ uim_debug("call callback_http! size = %d", len);
+ uim_debug("50414 callback_http REASON %d", reason);
+
+ switch(reason) {
+ case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION:
+ uim_debug("CONNECTION %x", wsi);
+ break;
+ case LWS_CALLBACK_ESTABLISHED:
+ uim_debug("ESTABLISHED %x", wsi);
+ socket_val = wsi;
+ n = sprintf((char *)p, "%s", "ANS HELLO");
+ break;
+ case LWS_CALLBACK_ADD_POLL_FD:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_ADD_POLL_FD");
+ break;
+ case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED");
+ break;
+ case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER");
+ break;
+ case LWS_CALLBACK_CLIENT_ESTABLISHED:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLIENT_ESTABLISHED");
+ break;
+ case LWS_CALLBACK_SET_MODE_POLL_FD:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_SET_MODE_POLL_FD");
+ break;
+ case LWS_CALLBACK_CLEAR_MODE_POLL_FD:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLEAR_MODE_POLL_FD");
+ break;
+ case LWS_CALLBACK_CLIENT_WRITEABLE:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLIENT_WRITEABLE");
+ break;
+ case LWS_CALLBACK_RECEIVE:
+
+ if( (in != NULL) && (strncmp( (char *)in, "OPEN", strlen("OPEN") ) == 0 )) {
+
+ uim_debug("OPEN loading_edje_file [%s]",(char *)in);
+ strncpy(edje_str, edje_parse_str(in, 1), sizeof(edje_str));
+ loading_edje_file(&edje_str[0]);
+ if(socket_val)
+ {
+ event_message(socket_val, "RESULT SUCCESS");
+ uim_debug ("SEND RESULT SUCCESS");
+ }
+ }
+ else if ( (in != NULL) && (strncmp("CLOSE", in, strlen("CLOSE")) == 0)) {
+ evas_object_del(g_edje);
+ uim_debug ("ONSCREEN CLOSE");
+ }
+
+ /* Get route from navi.js */
+ if( strncmp( (char *)in, "<route>", strlen( "<route>" ) ) == 0 ) {
+ uim_debug("<route> recv");
+ init_e3d(e_3d, in, len);
+ set_route = TRUE;
+ break;
+ }
+
+ memset(data, 0, sizeof(data));
+ strncpy(data, (char *)in, len);
+ uim_debug("RECIEVE[%d] %s", len, data);
+
+ if (len == 0) {
+ uim_debug("ERROR data=null (line:%d)", __LINE__);
+ break;
+ }
+ if (strncmp((char *)data, "CHG SEQ REQ_NAV", 15) == 0) {
+ uim_debug("RECIEVE COMMAND CHG SEQ REQ_NAV");
+
+ enable_navi = TRUE;
+ } else if (strncmp((char *)data, "CHG SEQ END_NAV", 15) == 0) {
+ uim_debug("RECIEVE COMMAND CHG SEQ END_NAV");
+
+ enable_navi = FALSE;
+ } else if(strncmp((char *)data, "ERR", 3) == 0) {
+ }
+ break;
+ case LWS_CALLBACK_CLIENT_RECEIVE:
+ memset(data, 0, sizeof(data));
+ strncpy(data, (char *)in, len);
+ uim_debug("CLIENT_RECIEVE[%d] %s", len, data);
+ break;
+ case LWS_CALLBACK_CLOSED:
+ uim_debug("RECIEVE REASON LWS_CALLBACK_CLOSED");
+ connected = 0;
+ break;
+ default:
+ uim_debug("REASON %d", reason);
+ break;
+ }
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief parse_elementary_value
+ * The message content received from DBus is acquired.
+ *
+ * @param[out] vic_val_p Vehicles information data
+ * @param[in] iter message received from DBus
+ * @return result
+ * @retval TRUE success
+ * @retval FALSE error
+ */
+/*--------------------------------------------------------------------------*/
+static bool
+parse_elementary_value(union VicVal_t *vic_val_p, DBusMessageIter *iter)
+{
+ dbus_int32_t i32_val;
+ dbus_int32_t i16_val;
+ dbus_uint32_t u32_val;
+ dbus_uint16_t u16_val;
+ uint8_t byte_val;
+ dbus_bool_t b_val;
+ double d_val;
+ char *s_val;
+ char *w_s_val;
+
+ char sig;
+
+ if (vic_val_p == NULL || iter == NULL){
+ uim_debug( "Err Parameter NG " );
+ return FALSE;
+ }
+
+ sig = dbus_message_iter_get_arg_type(iter);
+
+ switch (sig) {
+ case DBUS_TYPE_INT32:
+ dbus_message_iter_get_basic(iter, &i32_val);
+ vic_val_p->i32_val = i32_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_INT16:
+ dbus_message_iter_get_basic(iter, &i16_val);
+ vic_val_p->i16_val = i16_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_UINT32:
+ dbus_message_iter_get_basic(iter, &u32_val);
+ vic_val_p->u32_val = u32_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_UINT16:
+ dbus_message_iter_get_basic(iter, &u16_val);
+ vic_val_p->u16_val = u16_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_BOOLEAN:
+ dbus_message_iter_get_basic(iter, &b_val);
+ vic_val_p->b_val = b_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_BYTE:
+ dbus_message_iter_get_basic(iter, &byte_val);
+ vic_val_p->byte_val = byte_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_DOUBLE:
+ dbus_message_iter_get_basic(iter, &d_val);
+ vic_val_p->d_val = d_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_STRING:
+#if 0
+ dbus_message_iter_get_basic(iter, &s_val);
+ w_s_val = (char *)malloc(strlen(s_val) + 1);
+ if(w_s_val == NULL) {
+ uim_debug( "Err malloc" );
+ return FALSE ;
+ }
+ strncpy(w_s_val, s_val, strlen(s_val));
+ vic_val_p->s_val = w_s_val;
+ vic_val_p++;
+ break;
+#endif
+ default:
+ uim_debug("Err parse_elementary_value: unknown type");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief parse_value
+ * parse message received from DBus
+ *
+ * @param[out] vic_val_p Vehicles information data
+ * @param[in] iter message received from DBus
+ * @return result
+ * @retval TRUE success
+ * @retval FALSE error
+ */
+/*--------------------------------------------------------------------------*/
+static bool
+parse_value(union VicVal_t *vic_val_p, DBusMessageIter *iter)
+{
+ char curr;
+
+ if (vic_val_p == NULL || iter == NULL){
+ uim_debug( "Err Parameter NG " );
+ return FALSE;
+ }
+
+ curr = dbus_message_iter_get_arg_type(iter);
+
+ switch (curr) {
+ case DBUS_TYPE_BYTE:
+ case DBUS_TYPE_BOOLEAN:
+ case DBUS_TYPE_INT16:
+ case DBUS_TYPE_INT32:
+ case DBUS_TYPE_UINT16:
+ case DBUS_TYPE_UINT32:
+ case DBUS_TYPE_DOUBLE:
+ case DBUS_TYPE_STRING:
+ return parse_elementary_value(vic_val_p, iter);
+ case DBUS_TYPE_ARRAY:
+ case DBUS_TYPE_STRUCT:
+ case DBUS_TYPE_DICT_ENTRY:
+ return FALSE;
+ case DBUS_TYPE_INVALID:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief getAmbDbus
+ * Vehicle information is acquired from AMB.(D-Bus)
+ *
+ * @param[in] key vic_data index
+ * @param[out] vic_val_p Vehicles information data
+ * @return result
+ * @retval = 0 success
+ * @retval =-1 error
+ */
+/*--------------------------------------------------------------------------*/
+static int
+getAmbDbus(int key, union VicVal_t *vic_val_p)
+{
+ /* local variable */
+ DBusMessage *message;
+ DBusError error;
+ int result = 0;
+ const char *v_string[] = {vic_data[key].interface_name,
+ vic_data[key].property_name };
+ const char *dest = Bus_name;
+ DBusMessage *reply;
+ int reply_timeout = 1000; /* Millisecond */
+ DBusMessageIter iter;
+ DBusMessageIter iter_array;
+ union VicVal_t *tmp_vic_val_p = vic_val_p;
+
+ /* initialize */
+ dbus_error_init(&error);
+
+ if (NULL == g_connection) {
+ /* obtain the right to use dbus */
+ g_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
+
+ if (g_connection == NULL){
+ uim_debug( "Err dbus_bus_get" );
+
+ /* Release err parameter */
+ dbus_error_free(&error);
+ return -1;
+ }
+ }
+
+ /* Constructs a new message */
+ message = dbus_message_new_method_call(DBUS_SERVICE,
+ vic_data[key].path_name,
+ DBUS_INTERFACE,
+ DBUS_METHOD);
+ if(message == NULL){
+ uim_debug( "Err dbus_message_new_method_call" );
+
+ /* Release the connection */
+ dbus_connection_unref (g_connection);
+ g_connection = NULL;
+ return -1;
+ }
+
+ /* Gets the type of a message */
+ result = dbus_message_append_args(message,
+ DBUS_TYPE_STRING,
+ &v_string[0],
+ DBUS_TYPE_STRING,
+ &v_string[1],
+ DBUS_TYPE_INVALID);
+
+ if ( !result ){
+ uim_debug( "Err dbus_message_append_args" );
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ /* Release the message */
+ dbus_message_unref(message);
+
+ return -1;
+ }
+
+ /* Gets the error name */
+ if (dest && !dbus_message_set_destination (message, dest)){
+ uim_debug("Err dbus_message_new_method_call");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+
+ return -1;
+ }
+
+ /* Queues a message to send */
+ reply = dbus_connection_send_with_reply_and_block(g_connection,
+ message,
+ reply_timeout,
+ &error);
+ if (reply == NULL){
+//DEBUG uim_debug( "Err dbus_connection_send_with_reply_and_block" );
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+
+ /* Release err parameter */
+ dbus_error_free(&error);
+
+ return -1;
+ }
+
+ /* Gets the result */
+ dbus_message_iter_init(reply, &iter);
+ dbus_message_iter_recurse(&iter, &iter_array);
+
+ /* Type conversion of the resulting value */
+ result = parse_value(tmp_vic_val_p, &iter_array);
+ if (result != TRUE) {
+ uim_debug( "Err parse_elementary_value" );
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ return -1;
+ }
+
+ /* Release the message */
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief getLocationFromAmb
+ * Location information acquisition from AMB.
+ *
+ * @param none
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+getLocationFromAmb()
+{
+ union VicVal_t vic_val[32];
+ int result = 0;
+ int i;
+ char vic_str[256];
+
+ for(i = 0; i < property_num ; i++){
+ result = getAmbDbus(i, vic_val);
+
+ if (result != 0){
+//DEBUG uim_debug("Err getAmbDbus : %s",vic_data[i].name);
+ continue;
+ }
+
+ switch(vic_data[i].property){
+ case LATITUDE :
+ if((camera_geocode.lat != vic_val[0].d_val) &&
+ (vic_val[0].d_val != 0))
+ {
+ uim_debug ("%s(%f)",vic_data[i].name, vic_val[0].d_val);
+ camera_geocode.lat = vic_val[0].d_val;
+ }
+
+ break;
+ case LONGITUDE :
+ if((camera_geocode.lon != vic_val[0].d_val) &&
+ (vic_val[0].d_val != 0))
+ {
+ uim_debug ("%s(%f)",vic_data[i].name, vic_val[0].d_val);
+ camera_geocode.lon = vic_val[0].d_val;
+ }
+
+ break;
+ case DIRECTION :
+ if(camera_geocode.dir != vic_val[0].i32_val)
+ {
+ uim_debug ("%s(%d)",vic_data[i].name, vic_val[0].i32_val);
+ camera_geocode.dir = vic_val[0].i32_val;
+ }
+ break;
+ case VEHICLESPEED :
+//DEBUG uim_debug ("%s(%d)",vic_data[i].name, vic_val[0].i32_val);
+ if(ui_vicspeed != vic_val[0].i32_val)
+ {
+ uim_debug ("%s(%d)",vic_data[i].name, vic_val[0].i32_val);
+ ui_vicspeed = vic_val[0].i32_val;
+ }
+ break;
+ default :
+ uim_debug ("ERROR no property : %s", vic_data[i].name);
+ break;
+ }
+
+ }
+ return;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief get_config
+ * The config file for vehicle information acquisition is read.
+ *
+ * @param none
+ * @return result
+ * @retval = 0 success
+ * @retval =-1 error
+ */
+/*--------------------------------------------------------------------------*/
+static int
+get_config()
+{
+ FILE *fp;
+ int k = 0;
+ int j, m;
+ char buff[512];
+ char *tp;
+ char *clm = " \n";
+
+ fp = fopen( CONFIG_FILE , "r" );
+ if( fp == NULL ) {
+ uim_debug( "File open error" );
+ return -1;
+ }
+
+ for(m = 0 ; k < MAX_PARA_NUM ; m++){
+ if( fgets( buff, sizeof(buff) - 2, fp) != NULL){
+ tp = strtok( buff, clm );
+ if(tp != NULL){
+ if(tp[0] != '#' ){
+ for(j = 0; vic_key_data[j].id != -1; j++ ){
+ if(strcmp(tp, vic_key_data[j].name) == 0){
+ vic_data[k].property = vic_key_data[j].id;
+ strcpy( vic_data[k].name, tp);
+ strcpy( vic_data[k].path_name, strtok( NULL, clm ));
+ strcpy( vic_data[k].interface_name, strtok( NULL, clm ));
+ strcpy( vic_data[k].property_name, strtok(NULL,clm ));
+
+ uim_debug( "vic_data[%d].property=%d",k,vic_data[k].property );
+ uim_debug( "vic_data[%d].name=%s",k,vic_data[k].name );
+ uim_debug( "vic_data[%d].path_name=%s", k, vic_data[k].path_name);
+ uim_debug( "vic_data[%d].interface_name=%s", k,vic_data[k].interface_name);
+ uim_debug( "vic_data[%d].property_name=%s", k,vic_data[k].property_name);
+
+ k++;
+ break;
+ }
+ }
+ if(vic_key_data[j].id == -1){
+ uim_debug("Err config.txt Line:%d Unregistered parameter name",m+1);
+ }
+
+ }else{
+ uim_debug("config.txt Line:%d Comment out '#'Discovery",m+1);
+ }
+ }else{
+ uim_debug("config.txt Line:%d Comment out Null line",m+1);
+ }
+ }else{
+ uim_debug("config.txt The end of data reading");
+ break;
+ }
+ }
+ fclose(fp);
+
+ property_num = k;
+ if( property_num == 0 ) {
+ uim_debug( "config.txt No valid data");
+ return -1;
+ }
+ return 0;
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief edje_parse_str
+ * A character string is decomposed by a delimiter.
+ *
+ * @param[in] key vic_data index
+ * @param[in] vic_val_p Vehicles information data
+ * @return The pointer address to a lexical token
+ * @retval > 0 success
+ * @retval NULL error
+ */
+/*--------------------------------------------------------------------------*/
+static char* edje_parse_str(void *in, int arg_num)
+{
+ int i;
+ unsigned char *data;
+
+ uim_debug("edje_parse_str %s, arg = %d", in, arg_num);
+ data = strtok(in, " ");
+ /* arg_num : 0 to n */
+ for (i = 0; i < arg_num; i++) {
+ data = strtok( NULL, " ");
+ }
+ uim_debug("edje_parse_str data: %s",data);
+ return data;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * @brief event_message
+ * send message
+ *
+ * @param[in] wsi libwebsockets management table to send
+ * @param[in] fromat message to send
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+event_message(struct libwebsocket *wsi, char *format, ...)
+{
+ va_list list;
+ char message[256];
+
+ va_start(list, format);
+ vsnprintf(message, sizeof(message), format, list);
+ va_end(list);
+
+ uim_debug("OnScreen: event_message wsi = %p, %s", wsi, message);
+ if (wsi) {
+ int n = 0;
+ unsigned char buf[LWS_SEND_BUFFER_PRE_PADDING + 512 +
+ LWS_SEND_BUFFER_POST_PADDING];
+ unsigned char *p = &buf[LWS_SEND_BUFFER_PRE_PADDING];
+
+ n = sprintf((char *)p, "%s", message);
+ n = libwebsocket_write(wsi, p, n, LWS_WRITE_TEXT);
+ uim_debug("OnScreen: libwebsocket_write return = %d", n);
+ }
+ else {
+ uim_debug("OnScreen: wsi is not initialized");
+ }
+
+ return;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * @brief _touch_up_edje
+ * Touch-up event processing.
+ *
+ * @param[in] data user data
+ * @param[in] obj evas object of the button
+ * @param[in] event_info evas event infomation
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+_touch_up_edje(void *data, Evas *evas , Evas_Object *obj, void *event_info)
+{
+ /* get name from userdata */
+ if (data != NULL) {
+ uim_debug("OnScreen: user data is %s", (const char *)data);
+
+ if(socket_val)
+ {
+ event_message(socket_val, "TOUCH %s %s", edje_str, data);
+ uim_debug ("SEND TOUCH %s ",data);
+ }
+ }
+ else
+ {
+ uim_debug("OnScreen: user data is NULL");
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * @brief loading_edje_file
+ * Loading of edje file.
+ *
+ * @param[in] edje_file edje file
+ * @return result
+ * @retval = 0 success
+ * @retval =-1 error
+ */
+/*--------------------------------------------------------------------------*/
+static int
+loading_edje_file(const char *edje_file)
+{
+ Evas_Object *part; /* part handle */
+ Eina_List *group; /* edje group list */
+ Eina_List *list; /* part list in edje */
+ int group_count = 0; /* group counter */
+ int name_count = 0; /* name counter */
+
+ g_evas = ecore_evas_get(window);
+ if (!g_evas) {
+ uim_debug("OnScreen: could not create evas.");
+ return -1;
+ }
+
+ /* delete edge */
+ evas_object_del(g_edje);
+
+ /* create and add object in canvas from edje */
+ g_edje = edje_object_add(g_evas);
+ if (!g_edje) {
+ uim_debug("OnScreen: could not create edje object!");
+ return -1;
+ }
+
+ /* get group list */
+ group = edje_file_collection_list(edje_file);
+ while (group != NULL)
+ {
+ /* Set the edj file */
+ if (!edje_object_file_set(g_edje, edje_file, (const char *)group->data)) {
+ int err = edje_object_load_error_get(g_edje);
+ const char *errmsg = edje_load_error_str(err);
+ uim_debug("OnScreen: could not load %s: %s", edje_file, errmsg);
+
+ edje_file_collection_list_free(group);
+ evas_object_del(g_edje);
+ return -1;
+ }
+ uim_debug("OnScreen: group[%d] data : %s", group_count, (const char *)group->data);
+
+ /* get list */
+ list = edje_object_access_part_list_get(g_edje);
+ while (list != NULL) {
+ uim_debug("OnScreen: list[%d] data : %s", name_count, (const char *)list->data);
+
+ /* set callback for part name */
+ part = edje_object_part_object_get((const Evas_Object *)g_edje, (const char *)list->data);
+ if(part != NULL) {
+ uim_debug("OnScreen: list[%d] name : %s", name_count, (const char *)list->data);
+ evas_object_event_callback_add(part, EVAS_CALLBACK_MOUSE_UP, _touch_up_edje, list->data);
+ }
+ else {
+ uim_debug("OnScreen: list[%d] is NULL", name_count);
+ }
+
+ /* to next list */
+ list = list->next;
+ name_count++;
+ }
+
+ /* to next group */
+ group = group->next;
+ group_count++;
+ }
+ uim_debug("OnScreen: group num is %d", group_count);
+ uim_debug("OnScreen: name num is %d", name_count);
+
+ /* Put in the image */
+ evas_object_move(g_edje, 0, 0);
+ /* Resize the image */
+ evas_object_resize(g_edje, W_WIDTH, W_HEIGHT);
+ /* Show the image */
+ evas_object_show(g_edje);
+
+ evas_object_layer_set(g_edje, LAYER_UI);
+
+ /* Show the window */
+ /* ecore_evas_show(g_window); */
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * @brief res_callback
+ * Notice event processing of a resource state.
+ *
+ * @param[in] info rsource information
+ * @param[in] user_data user data(UNUSED)
+ * @return none
+ */
+/*--------------------------------------------------------------------------*/
+static void
+res_callback(ico_apf_resource_notify_info_t* info, void *user_data)
+{
+ int ret;
+
+ uim_debug("##==> Callbacked evt=%d res=%d id=%d bid=%d appid=%s dev=%s"
+ " user_data=%d", info->state, info->resid, info->id, info->bid,
+ info->appid, info->device, (int)user_data);
+
+ switch (info->state) {
+ case ICO_APF_RESOURCE_STATE_ACQUIRED:
+ case ICO_APF_RESOURCE_STATE_DEPRIVED:
+ case ICO_APF_RESOURCE_STATE_WAITTING:
+ case ICO_APF_RESOURCE_STATE_RELEASED:
+ if (info->resid == ICO_APF_RESID_INT_SCREEN) {
+ ret = ico_apf_resource_reply_int_screen_mode(info->device, info->bid, info->id, 1);
+ uim_debug("##==> callback reply int_screen(%s,%d,%d,1) = %d",
+ info->device, info->bid, info->id, ret);
+ }
+ else if (info->resid == ICO_APF_RESID_ON_SCREEN) {
+ ret = ico_apf_resource_reply_int_screen_mode_disp(info->device, info->id, 1);
+ uim_debug("##==> callback reply on_screen(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ else {
+ ret = ico_apf_resource_reply_screen_mode(info->device, info->id, 1);
+ uim_debug("##==> callback reply screen(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ break;
+ default:
+ /* NOP */
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+/*
+ * @brief sample navigation application
+ * main routine
+ *
+ * @param main() finction's standard parameter (argc,argv)
+ * @return result
+ * @retval =0 success
+ * @retval =-1 failed
+ */
+/*--------------------------------------------------------------------------*/
+int
+main(int argc, char *argv[])
+{
+ int i;
+ int getscreen;
+ char appid[ICO_UXF_MAX_PROCESS_NAME+1];
+ int ret = 0;
+ static struct libwebsocket *wsi;
+ connected = 0;
+
+ /* Setting the log output */
+ if (ico_apf_get_app_id(0, appid) == ICO_APP_CTL_E_NONE) {
+ ico_apf_log_open(appid);
+ }
+
+ load_config_file();
+
+ elm_init(argc, argv);
+
+ // TODO
+ enable_navi = FALSE;
+ set_route = FALSE;
+
+ /* initialize */
+ if(0 != get_config()){
+ uim_debug( "ERROR get_config()" );
+ return -1;
+ }
+
+ getscreen = 0;
+ sscrntype[0] = 0;
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ if (strcasecmp(argv[i], "-basescreen") == 0) {
+ getscreen = 1; /* get base screen */
+ strcpy(sscrntype, "BasicScreen");
+ uim_debug("BasicScreen");
+ }
+ else if (strcasecmp(argv[i], "-intscreen") == 0) {
+ getscreen = 2; /* get interrupt screen */
+ strcpy(sscrntype, "IntScreen");
+ }
+ else if (strcasecmp(argv[i], "-onscreen") == 0) {
+ getscreen = 3; /* get on screen */
+ strcpy(sscrntype, "OnScreen");
+ }
+ }
+ }
+
+ ecore_evas_init();
+
+ if (getscreen > 0) {
+ /* initialize resource control for Ecore */
+ if (ico_apf_ecore_init(NULL) != ICO_APF_E_NONE) {
+ uim_debug("ico_apf_ecore_init() Error");
+ ecore_evas_shutdown();
+ return -1;
+ }
+
+ /* set resource request callback */
+ ico_apf_resource_set_event_cb(res_callback, NULL);
+
+ /* acquire a right to display a screen */
+ if (getscreen == 1) {
+ ret = ico_apf_resource_get_screen_mode(NULL, 0);
+ }
+ else if (getscreen == 2) {
+ ret = ico_apf_resource_get_int_screen_mode(NULL, 0, 0);
+ }
+ else {
+ ret = ico_apf_resource_get_int_screen_mode_disp(NULL, 0);
+ }
+ }
+ uim_debug("getscreen = %d, ret = %d",getscreen, ret);
+
+ /* window setup */
+ window = ecore_evas_new(NULL, 0, 0, W_WIDTH, W_HEIGHT, "frame=0");
+ if (!window) goto error;
+
+ ecore_evas_show(window);
+
+ /* Camera Layer */
+ e_cam = ecore_evas_get(window);
+ cam = evas_object_image_add(e_cam);
+#ifdef _USE_CAMERA_
+ capture = cvCreateCameraCapture(conf_data[USB_CAMERA_ID]);
+ if (!capture) {
+ uim_debug("cvCaptureFromCAM failed.");
+ return -1;
+ }
+
+ captureImage = cvQueryFrame(capture);
+ uim_debug("camera width = %d, height = %d", captureImage->width, captureImage->height);
+ convert_data_evas_cv(cam, captureImage);
+#else
+
+#ifdef _USE_OPENCV_
+ evas_object_image_from_cv(cam, test_camera_path);
+#else
+ evas_object_image_file_set(cam, test_camera_path, NULL);
+#endif
+
+#endif
+ evas_object_image_fill_set(cam, 0, 0, W_WIDTH, W_NAVI_HEIGHT);
+ evas_object_move(cam, W_NAVI_ORIGINE_X, W_NAVI_ORIGINE_Y);
+ evas_object_resize(cam, W_WIDTH, W_NAVI_HEIGHT);
+
+ evas_object_show(cam);
+
+ /* 3D Layer */
+ e_3d = ecore_evas_get(window);
+
+ /* UI Layer */
+ e_ui = ecore_evas_get(window);
+ e_ui_init();
+
+ /* Server */
+ context = libwebsocket_create_context(port, NULL, protocols, libwebsocket_internal_extensions,
+ NULL, NULL, -1, -1, 0);
+ if (context == NULL) {
+ fprintf(stderr, "libwebsocket_create_context failed."); goto error;
+ }
+
+ connected = 1;
+ ecore_timer_add(0.05, callback_listener, context);
+
+ /* Browser(Map) Layer */
+ e_map_init();
+
+ edje_init();
+
+ /* timer */
+ ecore_timer_add(TIME_INTERVAL_AR, _time_interval_navi_cb, cam);
+
+ ecore_timer_add(TEST_TIME, _time_interval_map_renew_cb, NULL);
+
+ /* main loop */
+ ecore_main_loop_begin();
+
+ /* cleanup */
+ e3d_cleanup();
+
+#ifdef _USE_CAMERA_
+ cvReleaseCapture(&capture);
+#endif
+
+ if (NULL != g_connection)
+ {
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ }
+
+ ico_apf_ecore_term();
+
+ ecore_evas_free(window);
+ ecore_evas_shutdown();
+
+ return 0;
+
+error:
+ fprintf(stderr, "Evas engine error.");
+ ecore_evas_shutdown();
+ return -1;
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief header file of sample navigation application
+ *
+ * @date Apr-25-2013
+ */
+
+#ifndef SAMPLENAVI_H_
+#define SAMPLENAVI_H_
+
+/* enum */
+enum ConfDataID {
+ USB_CAMERA_ID,
+ LANDMARK_POSITION,
+ LANDMARK_ROTATION,
+ CONF_DATA_MAX
+};
+
+extern int conf_data[CONF_DATA_MAX];
+
+#endif /* SAMPLENAVI_H_ */
+
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Sound Sample APP
+ * Test use with which sound is sounded
+ *
+ * @date Mar-04-2013
+ */
+
+#ifdef HAVE_CONFIG_H
+
+#include "config.h"
+#define __UNUSED__
+#else
+#define __UNUSED__
+#endif
+
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+
+#include <unistd.h>
+#include <glib.h>
+//#include "app_log.h"
+#include "ico_apf.h"
+#include "ico_apf_ecore.h"
+#include "ico_apf_log.h"
+#include "soundsample.h"
+
+/*============================================================================*/
+/* Define fixed parameters */
+/*============================================================================*/
+//#define WIDTH (700) /* Background width */
+//#define HEIGHT (934) /* Background height */
+//#define WIDTH (400) /* Background width */
+//#define HEIGHT (400) /* Background height */
+#define WIDTH (600) /* Background width */
+#define HEIGHT (600) /* Background height */
+
+//#define LOG_NAME "/home/rpf/var/log/uifw/audioTP.log"
+#define LOG_NAME "/tmp/ico-app-soundsample.log"
+//#define CONFIG_FILE "/home/rpf/src/app/audioTP/soundsample_config.txt"
+#define CONFIG_FILE "/opt/apps/org.tizen.ico.app-soundsample/res/soundsample_config.txt"
+
+#define MAX_BUTTON_NUM 3
+#define MAX_DRAW_LEM 20
+
+#define GROUP_DATA "data"
+#define KEY_WAVFILE_PATH "wavfile_path"
+#define KEY_SERVER_IP "server_ip"
+#define KEY_DEVICE_NAME "device_name"
+#define KEY_VOLUME1 "volume1"
+#define KEY_VOLUME2 "volume2"
+#define KEY_APP_NAME "app_name"
+#define KEY_STREAM_NAME "stream_name"
+
+/*============================================================================*/
+/* Define data types */
+/*============================================================================*/
+struct color_val_t
+{
+ int r; /* red */
+ int g; /* green */
+ int b; /* blue */
+ int a; /* alpha */
+};
+
+struct size_val_t
+{
+ Evas_Coord w; /* width */
+ Evas_Coord h; /* height */
+};
+
+struct font_val_t
+{
+ char name[255]; /* font name */
+ Evas_Font_Size size; /* font size */
+};
+
+struct pos_val_t
+{
+ Evas_Coord x; /* X position */
+ Evas_Coord y; /* Y position */
+};
+
+struct object_text_val_t
+{
+ struct color_val_t color;
+ struct size_val_t size;
+ struct font_val_t font;
+ struct pos_val_t pos;
+ char text[255];
+ void *func;
+};
+
+struct object_figure_val_t
+{
+ struct color_val_t color;
+ struct size_val_t size;
+ struct pos_val_t pos;
+ void *func;
+};
+
+/*============================================================================*/
+/* Function prototype for static(internal) functions */
+/*============================================================================*/
+static void _canvas_resize_cb(Ecore_Evas *ee);
+static void _on_destroy(Ecore_Evas *ee __UNUSED__);
+static Eina_Bool _timer_cb(void *data);
+static void _on_mousedown1(void *data, Evas *evas, Evas_Object *o,
+ void *einfo);
+static void _on_mousedown2(void *data, Evas *evas, Evas_Object *o,
+ void *einfo);
+static void _on_mousedown3(void *data, Evas *evas, Evas_Object *o,
+ void *einfo);
+static int start_audio(void);
+static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler);
+static void rcv_event(int event_num);
+static void send_event_req(int event_num);
+static void recv_event_res(int ret);
+static void chg_state(int state_num);
+static void conf_check_gerror(char *para_num, GError ** error);
+static int read_config(void);
+static void draw_text(Evas_Object *obj, struct object_text_val_t *text);
+static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr);
+
+/*============================================================================*/
+/* Tables and Valiables */
+/*============================================================================*/
+extern int pulse_main(struct audio_config_t *, int);
+
+/* state values */
+static int StateNum = STATE_STOP;
+static Evas_Object *State_text;
+
+/* file descriptor */
+static int Filedes[2];
+static int Filedes2[2];
+
+/* Child process ID */
+static pid_t ChPid = 0;
+
+/* Config data */
+static struct audio_config_t AudioConfig = {
+ NULL, NULL, NULL, -1, -1, NULL, NULL
+};
+
+static struct object_text_val_t ButtonText[MAX_BUTTON_NUM] = {
+ {{255, 0, 0, 255}, {180, 50}, {"Sans", 48}, {15 + 12, 70}, "START", NULL},
+ {{0, 255, 0, 255}, {180, 50}, {"Sans", 48}, {210 + 24, 70}, "STOP", NULL},
+ {{0, 0, 255, 255}, {180, 50}, {"Sans", 48}, {405 + 12, 70}, "PAUSE", NULL}
+};
+
+static struct object_figure_val_t ButtonFigr[MAX_BUTTON_NUM] = {
+ {{255, 0, 0, 100}, {180, 95}, {15, 120}, (void *) _on_mousedown1},
+ {{0, 255, 0, 100}, {180, 95}, {210, 120}, (void *) _on_mousedown2},
+ {{0, 0, 255, 100}, {180, 95}, {405, 120}, (void *) _on_mousedown3}
+};
+
+static struct object_figure_val_t BgFigr = {
+ {255, 255, 255, 255}, {WIDTH, HEIGHT}, {0, 0}, NULL
+};
+
+static struct object_text_val_t TimeText = {
+ {0, 0, 0, 255}, {150, 50}, {"Sans", 24}, {0, 0}, {}, (void *) _timer_cb
+};
+
+static struct object_text_val_t StateInfoText = {
+ {0, 0, 0, 255}, {150, 50}, {"Sans", 48}, {140, 300}, "STATE : STOP", NULL
+};
+
+static struct object_text_val_t AppNameText = {
+ {0, 0, 0, 255}, {150, 50}, {"Sans", 32}, {25, 440}, "App Name : ", NULL
+};
+
+static struct object_text_val_t StreamNameText = {
+ {0, 0, 0, 255}, {150, 50}, {"Sans", 32}, {25, 480}, "Stream Name : ",
+ NULL
+};
+
+static struct object_text_val_t PidText = {
+ {0, 0, 0, 255}, {150, 50}, {"Sans", 36}, {50, 530}, "PID : ", NULL
+};
+
+static Ecore_Evas *ee;
+static Evas_Object *text, *bg;
+static char ssndtype[32];
+
+static const char commands[] =
+ "commands are:\n"
+ "\tm - impose a minumum size to the window\n"
+ "\tx - impose a maximum size to the window\n"
+ "\tb - impose a base size to the window\n"
+ "\ts - impose a step size (different than 1 px) to the window\n"
+ "\th - print help\n";
+
+
+/* to inform current window's size */
+static void _canvas_resize_cb(Ecore_Evas *ee)
+{
+ int w, h;
+ char buf[256];
+
+ ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
+ snprintf(buf, sizeof(buf), "%s %d x %d", ssndtype, w, h);
+ evas_object_text_text_set(text, buf);
+ evas_object_move(text, 50, 25);
+ evas_object_resize(bg, w, h);
+}
+
+static void _on_destroy(Ecore_Evas *ee __UNUSED__)
+{
+ ecore_main_loop_quit();
+}
+
+static Eina_Bool _timer_cb(void *data)
+{
+ char str[32];
+ time_t timer;
+ struct tm *date;
+ timer = time(NULL);
+ date = localtime(&timer);
+ sprintf(str, "%s", asctime(date));
+ evas_object_text_text_set((Evas_Object *) data, str);
+
+ return EINA_TRUE;
+}
+
+static void _on_mousedown1(void *data, Evas *evas, Evas_Object *o,
+ void *einfo)
+{
+ uim_debug("_on_mousedown1: Enter");
+ uim_debug("Input event : START");
+
+ rcv_event(START_REQ);
+
+ uim_debug("_on_mousedown1: Leave");
+}
+
+static void _on_mousedown2(void *data, Evas *evas, Evas_Object *o,
+ void *einfo)
+{
+ uim_debug("_on_mousedown2: Enter");
+ uim_debug("Input event : STOP");
+
+ rcv_event(STOP_REQ);
+
+ uim_debug("_on_mousedown2: Leave");
+}
+
+static void _on_mousedown3(void *data, Evas *evas, Evas_Object *o,
+ void *einfo)
+{
+ uim_debug("_on_mousedown3: Enter");
+ uim_debug("Input event : PAUSE");
+
+ rcv_event(PAUSE_REQ);
+
+ uim_debug("_on_mousedown3: Leave");
+}
+
+static int start_audio(void)
+{
+ uim_debug("start_audio: Enter");
+
+ int ret = 0;
+
+ signal(SIGCLD, SIG_IGN);
+
+ if ((ChPid = fork()) < 0) {
+ uim_debug("Err fork");
+ return -1;
+ }
+ else if (ChPid == 0) {
+ /* Processing of child processes to start */
+ close(Filedes[1]);
+ close(Filedes2[0]);
+
+ uim_debug("Voice response : START");
+ ret = pulse_main(&AudioConfig, Filedes[0]);
+ uim_debug("Voice response : END");
+
+ uim_debug("pulse_main: ret = [%d]", ret);
+ recv_event_res(ret);
+
+ close(Filedes[0]);
+ close(Filedes2[1]);
+ /* Termination of child processes */
+ exit(0);
+ }
+
+ /* Processing of parent process */
+ uim_debug("Child process: ChPid = [%d]", ChPid);
+
+ uim_debug("start_audio: Leave");
+
+ return 0;
+}
+
+static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler)
+{
+ uim_debug("stop_audio: Enter");
+
+ char buff[255];
+ memset(buff, 0x00, sizeof(buff));
+
+ /* Reading from a pipe */
+ read(Filedes2[0], buff, sizeof(buff));
+ uim_debug("buff :%s", buff);
+
+ if (atoi(buff) != 0) {
+ uim_debug("pulse_main Err: ret= [%d]", atoi(buff));
+ _on_destroy(NULL);
+ }
+
+ /* State change */
+ chg_state(STATE_STOP);
+
+ /* Process id initialization */
+ ChPid = 0;
+
+ uim_debug("stop_audio: Leave");
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static void rcv_event(int event_num)
+{
+ uim_debug("rcv_event: Enter");
+
+ int ret = 0;
+
+ switch (StateNum) {
+ case STATE_START:
+ switch (event_num) {
+ case STOP_REQ:
+ /* event send */
+ send_event_req(event_num);
+ /* State change */
+ chg_state(STATE_STOP);
+ break;
+
+ case PAUSE_REQ:
+ /* event send */
+ send_event_req(event_num);
+ /* State change */
+ chg_state(STATE_PAUSE);
+ break;
+
+ default:
+ uim_debug("Not receive: StateNum = [%d],event_num = [%d]",
+ StateNum, event_num);
+ break;
+ }
+
+ break;
+
+ case STATE_STOP:
+ switch (event_num) {
+ case START_REQ:
+ /* Voice reproduction start */
+ ret = start_audio();
+ if (ret == 0) {
+ /* State change */
+ chg_state(STATE_START);
+ }
+ else {
+ uim_debug("start_audio Err: ret= [%d]", ret);
+ _on_destroy(NULL);
+ }
+ break;
+
+ default:
+ uim_debug("Not receive: StateNum = [%d],event_num = [%d]",
+ StateNum, event_num);
+ break;
+ }
+
+ break;
+
+ case STATE_PAUSE:
+ switch (event_num) {
+ case STOP_REQ:
+ /* event send */
+ send_event_req(event_num);
+ /* State change */
+ chg_state(STATE_STOP);
+ break;
+
+ case PAUSE_REQ:
+ /* event send */
+ send_event_req(event_num);
+ /* State change */
+ chg_state(STATE_START);
+ break;
+
+ default:
+ uim_debug("Not receive: StateNum = [%d],event_num = [%d]",
+ StateNum, event_num);
+ break;
+ }
+
+ break;
+
+ default:
+ uim_debug("Not support StateNum: StateNum = [%d]", StateNum);
+ break;
+ }
+
+ uim_debug("rcv_event: Leave");
+}
+
+static void send_event_req(int event_num)
+{
+ uim_debug("send_event_req: Enter");
+
+ char msg[32];
+ memset(msg, 0x00, sizeof(msg));
+
+ snprintf(msg, sizeof(msg), "%d", event_num);
+ uim_debug("msg = %s", msg);
+
+ write(Filedes[1], msg, strlen(msg) + 1);
+ uim_debug("send_event_req: Leave");
+}
+
+static void recv_event_res(int ret)
+{
+ uim_debug("recv_event_res: Enter");
+
+ char msg[32];
+ memset(msg, 0x00, sizeof(msg));
+
+ snprintf(msg, sizeof(msg), "%d", ret);
+ uim_debug("msg = %s", msg);
+
+ write(Filedes2[1], msg, strlen(msg) + 1);
+ uim_debug("recv_event_res: Leave");
+}
+
+static void chg_state(int state_num)
+{
+ uim_debug("chg_state: Enter");
+ uim_debug("chg_state state_num = [%d]", state_num);
+
+ char buf[ICO_UXF_MAX_PROCESS_NAME + 1];
+ memset(buf, 0x00, sizeof(buf));
+
+ switch (state_num) {
+ case STATE_START:
+ snprintf(buf, sizeof(buf), "%s", "STATE : START");
+ evas_object_text_text_set(State_text, buf);
+ StateNum = state_num;
+ break;
+
+ case STATE_STOP:
+ snprintf(buf, sizeof(buf), "%s", "STATE : STOP");
+ evas_object_text_text_set(State_text, buf);
+ StateNum = state_num;
+ break;
+
+ case STATE_PAUSE:
+ snprintf(buf, sizeof(buf), "%s", "STATE : PAUSE");
+ evas_object_text_text_set(State_text, buf);
+ StateNum = state_num;
+ break;
+
+ default:
+ uim_debug("Not support State: state_num = [%d]", state_num);
+ break;
+ }
+
+ uim_debug("chg_state StateNum = [%d]", StateNum);
+ uim_debug("chg_state: Leave");
+}
+
+static void conf_check_gerror(char *para_num, GError ** error)
+{
+ uim_debug("conf_check_gerror: Enter");
+
+ if (*error != NULL) {
+ uim_debug("Config [%s] : %s", para_num, (*error)->message);
+ }
+ g_clear_error(error);
+
+ uim_debug("conf_check_gerror: Leave");
+}
+
+static int read_config(void)
+{
+ uim_debug("read_config: Enter");
+
+ GKeyFile *keyfile;
+ GKeyFileFlags flags;
+ GError *error = NULL;
+
+ keyfile = g_key_file_new();
+ flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
+ if (!g_key_file_load_from_file(keyfile, CONFIG_FILE, flags, &error)) {
+ conf_check_gerror(CONFIG_FILE, &error);
+ g_key_file_free(keyfile);
+ return -1;
+ }
+
+ AudioConfig.wavfile_path = g_key_file_get_string(keyfile, GROUP_DATA,
+ KEY_WAVFILE_PATH,
+ &error);
+ if ((error) || (strlen(AudioConfig.wavfile_path) <= 0)) {
+ uim_debug("No config data [%s]", KEY_WAVFILE_PATH);
+ conf_check_gerror(KEY_WAVFILE_PATH, &error);
+ g_key_file_free(keyfile);
+ return -1;
+ }
+
+ AudioConfig.server_ip = g_key_file_get_string(keyfile, GROUP_DATA,
+ KEY_SERVER_IP, &error);
+ if ((error) || (strlen(AudioConfig.server_ip) <= 0)) {
+ uim_debug("No config data [%s]", KEY_SERVER_IP);
+ conf_check_gerror(KEY_SERVER_IP, &error);
+ AudioConfig.server_ip = NULL;
+ }
+
+ AudioConfig.device_name = g_key_file_get_string(keyfile, GROUP_DATA,
+ KEY_DEVICE_NAME, &error);
+ if ((error) || (strlen(AudioConfig.device_name) <= 0)) {
+ uim_debug("No config data [%s]", KEY_DEVICE_NAME);
+ conf_check_gerror(KEY_DEVICE_NAME, &error);
+ AudioConfig.device_name = NULL;
+ }
+
+ AudioConfig.volume1 = g_key_file_get_integer(keyfile, GROUP_DATA,
+ KEY_VOLUME1, &error);
+ if (error) {
+ uim_debug("No config data [%s]", KEY_VOLUME1);
+ conf_check_gerror(KEY_VOLUME1, &error);
+ AudioConfig.volume1 = -1;
+ }
+
+ AudioConfig.volume2 = g_key_file_get_integer(keyfile, GROUP_DATA,
+ KEY_VOLUME2, &error);
+ if (error) {
+ uim_debug("No config data [%s]", KEY_VOLUME2);
+ conf_check_gerror(KEY_VOLUME2, &error);
+ AudioConfig.volume2 = -1;
+ }
+
+ AudioConfig.app_name = g_key_file_get_string(keyfile, GROUP_DATA,
+ KEY_APP_NAME, &error);
+ if ((error) || (strlen(AudioConfig.app_name) <= 0)) {
+ uim_debug("No config data [%s]", KEY_APP_NAME);
+ conf_check_gerror(KEY_APP_NAME, &error);
+ AudioConfig.app_name = "TP_PulseAudio";
+ }
+
+ AudioConfig.stream_name = g_key_file_get_string(keyfile, GROUP_DATA,
+ KEY_STREAM_NAME, &error);
+ if ((error) || (strlen(AudioConfig.stream_name) <= 0)) {
+ uim_debug("No config data [%s]", KEY_STREAM_NAME);
+ conf_check_gerror(KEY_DEVICE_NAME, &error);
+ AudioConfig.stream_name = "Pri0";
+ }
+
+ uim_debug("read_config: Leave");
+ return 0;
+}
+
+static void draw_text(Evas_Object *obj, struct object_text_val_t *text)
+{
+ uim_debug("draw_text: Enter");
+
+ evas_object_color_set(obj, text->color.r, text->color.g, text->color.b,
+ text->color.a);
+ evas_object_resize(obj, text->size.w, text->size.h);
+ evas_object_text_font_set(obj, text->font.name, text->font.size);
+ evas_object_move(obj, text->pos.x, text->pos.y);
+ evas_object_show(obj);
+ evas_object_text_text_set(obj, text->text);
+
+ uim_debug("draw_text: Leave");
+}
+
+static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr)
+{
+ uim_debug("draw_figr: Enter");
+
+ evas_object_color_set(obj, figr->color.r, figr->color.g, figr->color.b,
+ figr->color.a);
+ evas_object_resize(obj, figr->size.w, figr->size.h);
+ evas_object_move(obj, figr->pos.x, figr->pos.y);
+ evas_object_show(obj);
+
+ uim_debug("draw_figr: Leave");
+}
+
+static void res_callback(ico_apf_resource_notify_info_t *info,
+ void *user_data)
+{
+ int ret;
+
+ uim_debug
+ ("##==> Callbacked! evt=%d res=%d id=%d bid=%d appid=%s dev=%s "
+ "user_data=%d", info->state, info->resid, info->id, info->bid,
+ info->appid, info->device, (int) user_data);
+
+ switch (info->state) {
+ case ICO_APF_RESOURCE_STATE_ACQUIRED:
+ case ICO_APF_RESOURCE_STATE_DEPRIVED:
+ case ICO_APF_RESOURCE_STATE_WAITTING:
+ case ICO_APF_RESOURCE_STATE_RELEASED:
+ if (info->resid == ICO_APF_RESID_INT_SOUND) {
+ ret =
+ ico_apf_resource_reply_int_sound_mode(info->device, info->id,
+ 1);
+ uim_debug("##==> callback reply int_sound(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ else {
+ ret =
+ ico_apf_resource_reply_sound_mode(info->device, info->id, 1);
+ uim_debug("##==> callback reply sound(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ break;
+ default:
+ /* NOP */
+ break;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int getsound;
+ char appid[64];
+
+ /* Log output setup */
+ if (ico_apf_get_app_id(0, appid) == ICO_APP_CTL_E_NONE) {
+ ico_apf_log_open(appid);
+ }
+
+ uim_debug("main: Enter");
+
+ Evas *evas;
+ Evas_Object *app_name_text;
+ Evas_Object *stream_name_text;
+ Evas_Object *pid_text;
+ Evas_Object *button_text[MAX_BUTTON_NUM];
+ Evas_Object *button_figr[MAX_BUTTON_NUM];
+ Evas_Object *time_text;
+ char buf[256];
+ char buf2[256];
+ int i = 0;
+
+ /* get resource control option */
+ getsound = 0;
+ ssndtype[0] = 0;
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ if (strcasecmp(argv[i], "-basesound") == 0) {
+ getsound = 1; /* get base sound */
+ strcpy(ssndtype, "BasecSound");
+ }
+ else if (strcasecmp(argv[i], "-intsound") == 0) {
+ getsound = 2; /* get interrupt sound */
+ strcpy(ssndtype, "IntSound");
+ }
+ else if (strncasecmp(argv[i], "-int=", 5) == 0) {
+ getsound = strtol(&argv[i][5], (char **) 0, 0);
+ getsound += 2; /* get interrupt sound */
+ sprintf(ssndtype, "IntSound.%d", getsound - 2);
+ }
+ }
+ }
+
+ StateNum = STATE_STOP;
+ ChPid = 0;
+ memset(buf, 0x00, sizeof(buf));
+ memset(buf2, 0x00, sizeof(buf));
+
+ if (pipe(Filedes) == -1) {
+ uim_debug("Err pipe Filedes");
+ return EXIT_FAILURE;
+ }
+
+ if (pipe(Filedes2) == -1) {
+ uim_debug("Err pipe Filedes2");
+ return EXIT_FAILURE;
+ }
+
+ if (read_config() == -1) {
+ uim_debug("Err Config Read NG");
+ return EXIT_FAILURE;
+ }
+
+ uim_debug("AudioConfig.wavfile_path = [%s]", AudioConfig.wavfile_path);
+ uim_debug("AudioConfig.server_ip = [%s]", AudioConfig.server_ip);
+ uim_debug("AudioConfig.device_name = [%s]", AudioConfig.device_name);
+ uim_debug("AudioConfig.volume1 = [%d]", AudioConfig.volume1);
+ uim_debug("AudioConfig.volume2 = [%d]", AudioConfig.volume2);
+ uim_debug("AudioConfig.app_name = [%s]", AudioConfig.app_name);
+ uim_debug("AudioConfig.stream_name = [%s]", AudioConfig.stream_name);
+
+ if (!ecore_evas_init()) {
+ return EXIT_FAILURE;
+ }
+
+ if (getsound > 0) {
+ /* initialize resource control for Ecore */
+ if (ico_apf_ecore_init(NULL) != ICO_APF_E_NONE) {
+ uim_debug("ico_apf_ecore_init() Error");
+ ecore_evas_shutdown();
+ return -1;
+ }
+
+ /* set resource request callback */
+ ico_apf_resource_set_event_cb(res_callback, NULL);
+
+ /* acquire a right to display a screen */
+ if (getsound == 1) {
+ ico_apf_resource_get_sound_mode(NULL, 0, 0);
+ }
+ else {
+ ico_apf_resource_get_int_sound_mode(NULL, getsound - 2, 0);
+ }
+ }
+
+ /* this will give you a window with an Evas canvas under the first
+ * engine available */
+ ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, "frame=0");
+ if (!ee) {
+ goto error;
+ }
+
+ ecore_evas_callback_delete_request_set(ee, _on_destroy);
+ ecore_evas_title_set(ee, "Ecore_Evas window sizes example");
+ ecore_evas_callback_resize_set(ee, _canvas_resize_cb);
+ ecore_evas_show(ee);
+
+ evas = ecore_evas_get(ee);
+
+ /* Background painting */
+ bg = evas_object_rectangle_add(evas);
+ draw_figr(bg, &BgFigr);
+
+ evas_object_focus_set(bg, EINA_TRUE);
+
+ /* App Name drawing */
+ app_name_text = evas_object_text_add(evas);
+ draw_text(app_name_text, &AppNameText);
+
+ if (strlen(AudioConfig.app_name) > MAX_DRAW_LEM) {
+ snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.app_name);
+ snprintf(buf, sizeof(buf), "%s%s...", "App name : ", buf2);
+ }
+ else {
+ snprintf(buf, sizeof(buf), "%s%s", "App name : ",
+ AudioConfig.app_name);
+ }
+
+ evas_object_text_text_set(app_name_text, buf);
+
+ /* Drawing window */
+ text = evas_object_text_add(evas);
+ evas_object_color_set(text, 255, 0, 0, 255);
+ evas_object_resize(text, 150, 50);
+ evas_object_text_font_set(text, "Sans", 20);
+ evas_object_show(text);
+
+ /* Stream Name drawing */
+ stream_name_text = evas_object_text_add(evas);
+ draw_text(stream_name_text, &StreamNameText);
+
+ if (strlen(AudioConfig.stream_name) > MAX_DRAW_LEM) {
+ snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.stream_name);
+ snprintf(buf, sizeof(buf), "%s%s...", "Stream name : ", buf2);
+ }
+ else {
+ snprintf(buf, sizeof(buf), "%s%s", "Stream name : ",
+ AudioConfig.stream_name);
+ }
+
+ evas_object_text_text_set(stream_name_text, buf);
+
+ /* PID drawing */
+ pid_text = evas_object_text_add(evas);
+ draw_text(pid_text, &PidText);
+ snprintf(buf, sizeof(buf), "%s%d", "PID : ", getpid());
+ evas_object_text_text_set(pid_text, buf);
+
+ /* Sound condition drawing */
+ State_text = evas_object_text_add(evas);
+ draw_text(State_text, &StateInfoText);
+
+ /** Button drawing */
+ for (i = 0; i < MAX_BUTTON_NUM; i++) {
+ /* Button name drawing */
+ button_text[i] = evas_object_text_add(evas);
+ draw_text(button_text[i], &ButtonText[i]);
+
+ /* Button Frame drawing */
+ button_figr[i] = evas_object_rectangle_add(evas);
+ draw_figr(button_figr[i], &ButtonFigr[i]);
+
+ /* Callback function entry */
+ evas_object_event_callback_add(button_figr[i],
+ EVAS_CALLBACK_MOUSE_DOWN,
+ (Evas_Object_Event_Cb) (ButtonFigr[i].
+ func),
+ State_text);
+ }
+
+ /* Drawing of the current time */
+ time_text = evas_object_text_add(evas);
+ draw_text(time_text, &TimeText);
+
+ /* Timer callback function entry */
+ ecore_timer_add(0.1, (Ecore_Task_Cb) (TimeText.func), time_text);
+
+ /* File descriptor to monitor callback function entry */
+ ecore_main_fd_handler_add(Filedes2[0], ECORE_FD_READ, stop_audio, NULL,
+ NULL, NULL);
+
+ _canvas_resize_cb(ee);
+ fprintf(stdout, commands);
+ ecore_main_loop_begin();
+
+ ico_apf_ecore_term();
+
+ ecore_evas_free(ee);
+ ecore_evas_shutdown();
+
+ close(Filedes[0]);
+ close(Filedes[1]);
+ close(Filedes2[0]);
+ close(Filedes2[1]);
+
+ /* Process check */
+ if ((ChPid > 0) && (kill(ChPid, 0) != EOF)) {
+ kill(ChPid, SIGKILL);
+ uim_debug("END Process ChPid = [%d]", ChPid);
+ }
+ uim_debug("main: Leave");
+
+ return 0;
+
+ error:
+ fprintf(stderr,
+ "You got to have at least one Evas engine built and linked up"
+ " to ecore-evas for this example to run properly.\n");
+ ecore_evas_shutdown();
+ return -1;
+}
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Sound Sample APP
+ * Test use with which sound is sounded
+ *
+ * @date Mar-04-2013
+ */
+
+#ifndef _SAMPLE_H_
+#define _SAMPLE_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ struct audio_config_t
+ {
+ char *wavfile_path;
+ char *server_ip;
+ char *device_name;
+ int volume1;
+ int volume2;
+ char *app_name;
+ char *stream_name;
+ };
+
+/* STATE */
+#define STATE_START 0
+#define STATE_STOP 1
+#define STATE_PAUSE 2
+
+/* EVENT */
+#define START_REQ 0
+#define STOP_REQ 1
+#define PAUSE_REQ 2
+
+/* PULSE DEFAULT VAL */
+#define APP_NAME "TP_PulseAudio"
+#define STREAM_NAME "Pri0"
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* _SAMPLE_H_ */
+
+/**
+ * End of File. (soundsample.h)
+ */
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Sound Sample APP
+ * Test use with which sound is sounded
+ *
+ * @date Mar-04-2013
+ */
+
+/**
+ * TP using PulseAudio with wavfile
+ **/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <pulse/mainloop.h>
+#include <pulse/context.h>
+#include <pulse/stream.h>
+#include <pulse/error.h>
+
+#include "soundsample_yswavfile.h"
+
+//#include "app_log.h"
+#include "ico_apf_log.h"
+#include "soundsample.h"
+
+#define ICO_PA_STREAM_PAUSE (1)
+#define ICO_PA_STREAM_RESUME (0)
+
+extern "C"
+{
+ int pulse_main(struct audio_config_t *audio_config, int filedes);
+}
+
+static int ExitFlg;
+static int ReadFiledes;
+#define REPEAT_FLG 1 /* ON:0 ,OFF:1 */
+
+static YSRESULT YsPulseAudioWaitForConnectionEstablished(pa_context *
+ paContext,
+ pa_mainloop *
+ paMainLoop,
+ time_t timeOut)
+{
+ time_t timeLimit = time(NULL) + timeOut;
+ while (timeLimit >= time(NULL)) {
+ pa_mainloop_iterate(paMainLoop, 0, NULL);
+ if (PA_CONTEXT_READY == pa_context_get_state(paContext)) {
+ return YSOK;
+ }
+ }
+ return YSERR;
+}
+
+static void event_input_callback(pa_mainloop_api *a, pa_io_event *e, int fd,
+ pa_io_event_flags_t f, void *userdata)
+{
+
+ uim_debug("event_input_callback: Enter");
+
+ char buff[255];
+ memset(buff, 0x00, sizeof(buff));
+
+ /* From a pipe to reading */
+ read(ReadFiledes, buff, sizeof(buff));
+ uim_debug("buff :%s", buff);
+
+ switch (atoi(buff)) {
+ case STOP_REQ:
+ uim_debug("Stop directions reception");
+ ExitFlg = 1;
+ break;
+
+ case PAUSE_REQ:
+ uim_debug("Pause directions reception");
+
+ if (0 == pa_stream_is_corked((pa_stream *) userdata)) {
+ pa_stream_cork((pa_stream *) userdata, ICO_PA_STREAM_PAUSE, NULL,
+ NULL);
+ uim_debug("pa_stream_cork(PAUSE)");
+ sleep(2);
+ uim_debug("sleep end");
+ }
+ else {
+ pa_stream_cork((pa_stream *) userdata, ICO_PA_STREAM_RESUME, NULL,
+ NULL);
+ uim_debug("pa_stream_cork(RESUME)");
+ sleep(2);
+ uim_debug("sleep end");
+ }
+ break;
+
+ default:
+ uim_debug("Err Reception range outside");
+ break;
+ }
+
+ uim_debug("event_input_callback: Leave");
+}
+
+int pulse_main(struct audio_config_t *audio_config, int filedes)
+{
+ char *server_ip = NULL;
+ char *device_name = NULL;
+ int volume_set = -1;
+ int volume_set2 = -1;
+ char *app_name = NULL;
+ char *stream_name = NULL;
+
+ pa_cvolume *cvolume = NULL;
+
+ char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
+ pa_channel_map cmap;
+
+ YsWavFile wavFile;
+
+ ReadFiledes = filedes;
+ ExitFlg = 0;
+
+ if (audio_config == NULL) {
+ uim_debug("Param Err");
+ return -1;
+ }
+
+ if (YSOK != wavFile.LoadWav(audio_config->wavfile_path)) {
+// fprintf(stderr, "Cannot open wave file.\n");
+ uim_debug("Cannot open wave file.");
+ return -1;
+ }
+
+ if (audio_config->volume1 != -1) {
+ cvolume = (pa_cvolume *) malloc(sizeof(pa_cvolume));
+ }
+ else {
+ cvolume = NULL;
+ }
+
+ server_ip = audio_config->server_ip;
+ device_name = audio_config->device_name;
+ volume_set = audio_config->volume1;
+ volume_set2 = audio_config->volume2;
+ app_name = audio_config->app_name;
+ stream_name = audio_config->stream_name;
+
+ uim_debug("Before Resampling:");
+ uim_debug("Bit per sample: %d", wavFile.BitPerSample());
+ uim_debug("Stereo: %d", wavFile.Stereo());
+ uim_debug("Playback Rate: %d", wavFile.PlayBackRate());
+ uim_debug("Signed: %d", wavFile.IsSigned());
+
+ wavFile.ConvertTo16Bit();
+ wavFile.ConvertToSigned();
+// wavFile.ConvertToStereo();
+ wavFile.Resample(44100);
+// wavFile.ConvertToMono();
+
+ uim_debug("After Resampling:");
+ uim_debug("Bit per sample: %d", wavFile.BitPerSample());
+ uim_debug("Stereo: %d", wavFile.Stereo());
+ uim_debug("Playback Rate: %d", wavFile.PlayBackRate());
+ uim_debug("Signed: %d", wavFile.IsSigned());
+
+ pa_mainloop *paMainLoop = pa_mainloop_new();
+ if (NULL == paMainLoop) {
+// fprintf(stderr,"Cannot create main loop.\n");
+ uim_debug("Cannot create main loop.");
+ return -1;
+ }
+ uim_debug("pa_mainloop_new()");
+
+ pa_context *paContext = pa_context_new(pa_mainloop_get_api(paMainLoop),
+ app_name);
+ if (NULL == paContext) {
+// fprintf(stderr,"Cannot create context.\n");
+ uim_debug("Cannot create context.");
+ return -1;
+ }
+ uim_debug("pa_context_new()");
+
+ // pa_context_set_state_callback(paContext,YsPulseAudioConnectionCallBack,NULL);
+ pa_context_connect(paContext, server_ip, (pa_context_flags_t) 0, NULL);
+ uim_debug("pa_context_connect()");
+
+ YsPulseAudioWaitForConnectionEstablished(paContext, paMainLoop, 5);
+
+ pa_sample_format_t format = PA_SAMPLE_U8;
+ switch (wavFile.BitPerSample()) {
+ case 8:
+ if (YSTRUE == wavFile.IsSigned()) {
+ wavFile.ConvertToUnsigned();
+ }
+ format = PA_SAMPLE_U8;
+ break;
+ case 16:
+ if (YSTRUE != wavFile.IsSigned()) {
+ wavFile.ConvertToSigned();
+ }
+ format = PA_SAMPLE_S16LE;
+ break;
+ }
+ const int rate = wavFile.PlayBackRate();
+ const int nChannel = (YSTRUE == wavFile.Stereo()? 2 : 1);
+
+ const pa_sample_spec ss = {
+ format,
+ rate,
+ nChannel
+ };
+
+ pa_channel_map_init_auto(&cmap, nChannel, PA_CHANNEL_MAP_ALSA);
+ uim_debug("pa_channel_map_init_auto()");
+ uim_debug("map: <%s>", pa_channel_map_snprint(cm, sizeof(cm), &cmap));
+
+ if (NULL != cvolume) {
+// int i = 0;
+ unsigned int i = 0;
+ for (i = 0; i < PA_CHANNELS_MAX; i++) {
+ if (1 == i) {
+ if (-1 != volume_set2) {
+ cvolume->values[i] = volume_set2;
+ }
+ }
+ else {
+ cvolume->values[i] = volume_set;
+ }
+ uim_debug("volume[%d]_%d", i, cvolume->values[i]);
+ }
+ cvolume->channels = nChannel;
+ }
+
+ unsigned int playBackPtr = 0;
+ YSBOOL checkForUnderflow = YSTRUE;
+// time_t t0 = time(NULL);
+ time_t prevT = time(NULL) - 1;
+
+ uim_debug("enter mainloop");
+ pa_stream *paStream;
+ int loopcnt;
+ static pa_io_event *stdio_event = NULL;
+ static pa_mainloop_api *mainloop_api = pa_mainloop_get_api(paMainLoop);
+
+ paStream = pa_stream_new(paContext, stream_name, &ss, &cmap);
+ if (NULL != paStream) {
+ uim_debug("Stream created! Getting there!");
+ }
+ else {
+ uim_debug("Stream created : NG");
+ ExitFlg = 1;
+ }
+
+ uim_debug("pa_stream_new()");
+
+ if (!(stdio_event = mainloop_api->io_new(mainloop_api, ReadFiledes,
+ PA_IO_EVENT_INPUT,
+ event_input_callback,
+ paStream))) {
+ uim_debug("io_new() failed()");
+ ExitFlg = 1;
+ }
+
+ pa_stream_connect_playback(paStream, device_name, NULL,
+ (pa_stream_flags_t) 0, cvolume, NULL);
+ uim_debug("pa_stream_connect_playback()");
+
+ int st = -1;
+ for (loopcnt = 0; ExitFlg != 1; loopcnt++) {
+ if (st != pa_stream_get_state(paStream)) {
+ st = pa_stream_get_state(paStream);
+
+ uim_debug("TURN(%6d)_", loopcnt);
+
+ switch (pa_stream_get_state(paStream)) {
+ case PA_STREAM_UNCONNECTED:
+ uim_debug("PA_STREAM_UNCONNECTED");
+ break;
+ case PA_STREAM_CREATING:
+ uim_debug("PA_STREAM_CREATING");
+ break;
+ case PA_STREAM_READY:
+ uim_debug("PA_STREAM_READY");
+ break;
+ case PA_STREAM_FAILED:
+ uim_debug("PA_STREAM_FAILED");
+ break;
+ case PA_STREAM_TERMINATED:
+ uim_debug("PA_STREAM_TERMINATED");
+ break;
+ }
+ }
+
+ if (time(NULL) != prevT) {
+/* uim_debug("Ping..."); */
+ prevT = time(NULL);
+ }
+
+ if (PA_STREAM_READY == pa_stream_get_state(paStream)) {
+ const size_t writableSize = pa_stream_writable_size(paStream);
+ const size_t sizeRemain = wavFile.SizeInByte() - playBackPtr;
+ const size_t writeSize =
+ (sizeRemain < writableSize ? sizeRemain : writableSize);
+
+ if (0 < writeSize) {
+ pa_stream_write(paStream, wavFile.DataPointer() + playBackPtr,
+ writeSize, NULL, 0, PA_SEEK_RELATIVE);
+ playBackPtr += writeSize;
+ uim_debug("pa_stream_write()_%d", (int) writeSize);
+ }
+ }
+
+ if ((wavFile.SizeInByte() <= playBackPtr) &&
+ (0 <= pa_stream_get_underflow_index(paStream)) &&
+ (YSTRUE == checkForUnderflow)) {
+ uim_debug
+ ("Underflow detected. (Probably the playback is done.)");
+ playBackPtr = 0;
+#if REPEAT_FLG
+ break;
+#endif
+ }
+ pa_mainloop_iterate(paMainLoop, 0, NULL);
+ }
+
+ uim_debug("STREAM is END.");
+
+ pa_stream_disconnect(paStream);
+ uim_debug("pa_stream_disconnect()");
+
+ pa_stream_unref(paStream);
+ uim_debug("pa_stream_unref()");
+// sleep(1);
+
+ uim_debug("leave mainloop");
+
+ if (NULL != cvolume) {
+ free(cvolume);
+ }
+
+ pa_context_disconnect(paContext);
+ uim_debug("pa_context_disconnect()");
+
+ pa_context_unref(paContext);
+ uim_debug("pa_context_unref()");
+
+ pa_mainloop_free(paMainLoop);
+ uim_debug("pa_mainloop_free()");
+
+ uim_debug("The End");
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Sound Sample APP
+ * Test use with which sound is sounded
+ *
+ * @date Mar-04-2013
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include "soundsample_yswavfile.h"
+
+//#include "app_log.h"
+#include "ico_apf_log.h"
+
+YsWavFile::YsWavFile()
+{
+ dat = NULL;
+ Initialize();
+}
+
+YsWavFile::~YsWavFile()
+{
+ if (dat != NULL) {
+ delete[] dat;
+ }
+}
+
+void YsWavFile::Initialize(void)
+{
+ if (dat != NULL) {
+ delete[] dat;
+ dat = NULL;
+ }
+
+ stereo = YSFALSE;
+ bit = 16;
+ rate = 44100;
+ sizeInBytes = 0;
+ isSigned = YSTRUE;
+}
+
+unsigned int YsWavFile::NTimeStep(void) const
+{
+ return SizeInByte() / BytePerTimeStep();
+}
+
+YSBOOL YsWavFile::Stereo(void) const
+{
+ return stereo;
+}
+
+unsigned int YsWavFile::BytePerTimeStep(void) const
+{
+ unsigned int nChannel = (YSTRUE == stereo ? 2 : 1);
+ return nChannel * BytePerSample();
+}
+
+unsigned int YsWavFile::BitPerSample(void) const
+{
+ return bit;
+}
+
+unsigned int YsWavFile::BytePerSample(void) const
+{
+ return bit / 8;
+}
+
+unsigned int YsWavFile::PlayBackRate(void) const
+{
+ return rate;
+}
+
+unsigned int YsWavFile::SizeInByte(void) const
+{
+ return sizeInBytes;
+}
+
+YSBOOL YsWavFile::IsSigned(void) const
+{
+ return isSigned;
+}
+
+const unsigned char *YsWavFile::DataPointer(void) const
+{
+ return dat;
+}
+
+const unsigned char *YsWavFile::DataPointerAtTimeStep(unsigned int ts) const
+{
+ return dat + ts * BytePerTimeStep();
+}
+
+static unsigned GetUnsigned(const unsigned char buf[])
+{
+ return buf[0] + buf[1] * 0x100 + buf[2] * 0x10000 + buf[3] * 0x1000000;
+}
+
+static unsigned GetUnsignedShort(const unsigned char buf[])
+{
+ return buf[0] + buf[1] * 0x100;
+}
+
+
+
+YSRESULT YsWavFile::LoadWav(const char fn[])
+{
+ FILE *fp;
+
+ uim_debug("Loading %s", fn);
+
+ fp = fopen(fn, "rb");
+ if (fp != NULL) {
+ unsigned char buf[256];
+ unsigned int l;
+ unsigned int fSize, hdrSize, dataSize;
+
+ // Wave Header
+ unsigned short wFormatTag, nChannels;
+ unsigned nSamplesPerSec, nAvgBytesPerSec;
+ unsigned short nBlockAlign, wBitsPerSample, cbSize;
+
+
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error in reading RIFF.");
+ goto ERREND;
+ }
+ if (strncmp((char *) buf, "RIFF", 4) != 0) {
+ uim_debug("Warning: RIFF not found.");
+ }
+
+
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error in reading file size.");
+ goto ERREND;
+ }
+ fSize = GetUnsigned(buf);
+ uim_debug("File Size=%d", fSize + 8);
+
+ if (fread(buf, 1, 8, fp) != 8) {
+ uim_debug("Error in reading WAVEfmt.");
+ goto ERREND;
+ }
+ if (strncmp((char *) buf, "WAVEfmt", 7) != 0) {
+ uim_debug("Warning: WAVEfmt not found");
+ }
+
+
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error in reading header size.");
+ goto ERREND;
+ }
+ hdrSize = GetUnsigned(buf);
+ uim_debug("Header Size=%d", hdrSize);
+
+
+ // WORD wFormatTag;
+ // WORD nChannels;
+ // DWORD nSamplesPerSec;
+ // DWORD nAvgBytesPerSec;
+ // WORD nBlockAlign;
+ // WORD wBitsPerSample;
+ // WORD cbSize;
+ if (fread(buf, 1, hdrSize, fp) != hdrSize) {
+ uim_debug("Error in reading header.");
+ goto ERREND;
+ }
+ wFormatTag = GetUnsignedShort(buf);
+ nChannels = GetUnsignedShort(buf + 2);
+ nSamplesPerSec = GetUnsigned(buf + 4);
+ nAvgBytesPerSec = GetUnsigned(buf + 8);
+ nBlockAlign = GetUnsignedShort(buf + 12);
+ wBitsPerSample = (hdrSize >= 16 ? GetUnsignedShort(buf + 14) : 0);
+ cbSize = (hdrSize >= 18 ? GetUnsignedShort(buf + 16) : 0);
+
+ uim_debug("wFormatTag=%d", wFormatTag);
+ uim_debug("nChannels=%d", nChannels);
+ uim_debug("nSamplesPerSec=%d", nSamplesPerSec);
+ uim_debug("nAvgBytesPerSec=%d", nAvgBytesPerSec);
+ uim_debug("nBlockAlign=%d", nBlockAlign);
+ uim_debug("wBitsPerSample=%d", wBitsPerSample);
+ uim_debug("cbSize=%d", cbSize);
+
+
+
+ while (1) {
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error while waiting for data.");
+ goto ERREND;
+ }
+
+ if ((buf[0] == 'd' || buf[0] == 'D')
+ && (buf[1] == 'a' || buf[1] == 'A') && (buf[2] == 't'
+ || buf[2] == 'T')
+ && (buf[3] == 'a' || buf[3] == 'A')) {
+ break;
+ }
+ else {
+ uim_debug("Skipping %c%c%c%c", buf[0], buf[1], buf[2],
+ buf[3]);
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error while skipping unknown block.");
+ goto ERREND;
+ }
+
+
+
+ l = GetUnsigned(buf);
+ if (fread(buf, 1, l, fp) != l) {
+ uim_debug("Error while skipping unknown block.");
+ goto ERREND;
+ }
+ }
+ }
+
+
+ if (fread(buf, 1, 4, fp) != 4) {
+ uim_debug("Error in reading data size.");
+ goto ERREND;
+ }
+ dataSize = GetUnsigned(buf);
+ uim_debug("Data Size=%d (0x%x)", dataSize, dataSize);
+
+ dat = new unsigned char[dataSize];
+ if ((l = fread(dat, 1, dataSize, fp)) != dataSize) {
+ uim_debug("Warning: File ended before reading all data.");
+ uim_debug(" %d (0x%x) bytes have been read", l, l);
+ }
+
+ stereo = (nChannels == 2 ? YSTRUE : YSFALSE);
+ bit = wBitsPerSample;
+ sizeInBytes = dataSize;
+ rate = nSamplesPerSec;
+
+ if (wBitsPerSample == 8) {
+ isSigned = YSFALSE;
+ }
+ else {
+ isSigned = YSTRUE;
+ }
+
+ fclose(fp);
+ return YSOK;
+ }
+ return YSERR;
+
+ ERREND:
+ uim_debug("Err!");
+ if (fp != NULL) {
+ fclose(fp);
+ }
+ return YSERR;
+}
+
+
+YSRESULT YsWavFile::ConvertTo16Bit(void)
+{
+ if (bit == 16) {
+ return YSOK;
+ }
+ else if (bit == 8) {
+ if (sizeInBytes > 0 && dat != NULL) {
+ unsigned char *newDat = new unsigned char[sizeInBytes * 2];
+// for (int i=0; i<sizeInBytes; i++)
+ for (unsigned int i = 0; i < sizeInBytes; i++) {
+ newDat[i * 2] = dat[i];
+ newDat[i * 2 + 1] = dat[i];
+ }
+ delete[] dat;
+ dat = newDat;
+
+ sizeInBytes *= 2;
+ bit = 16;
+ }
+ return YSOK;
+ }
+ return YSERR;
+}
+
+YSRESULT YsWavFile::ConvertTo8Bit(void)
+{
+ if (bit == 8) {
+ return YSOK;
+ }
+ else if (bit == 16) {
+ unsigned char *newDat = new unsigned char[sizeInBytes / 2];
+// for (int i=0; i<sizeInBytes; i+=2)
+ for (unsigned int i = 0; i < sizeInBytes; i += 2) {
+ newDat[i / 2] = dat[i];
+ }
+ if (dat != NULL) {
+ delete[] dat;
+ }
+ dat = newDat;
+ bit = 8;
+ sizeInBytes /= 2;
+ return YSOK;
+ }
+ return YSERR;
+}
+
+YSRESULT YsWavFile::ConvertToStereo(void)
+{
+ if (stereo == YSTRUE) {
+ return YSOK;
+ }
+ else {
+ if (bit == 8) {
+ unsigned char *newDat = new unsigned char[sizeInBytes * 2];
+// for (int i=0; i<sizeInBytes; i++)
+ for (unsigned int i = 0; i < sizeInBytes; i++) {
+ newDat[i * 2] = dat[i];
+ newDat[i * 2 + 1] = dat[i];
+ }
+ if (dat != NULL) {
+ delete[] dat;
+ }
+ dat = newDat;
+ stereo = YSTRUE;
+ sizeInBytes *= 2;
+ return YSOK;
+ }
+ else if (bit == 16) {
+ unsigned char *newDat = new unsigned char[sizeInBytes * 2];
+// for (int i=0; i<sizeInBytes; i+=2)
+ for (unsigned int i = 0; i < sizeInBytes; i += 2) {
+ newDat[i * 2] = dat[i];
+ newDat[i * 2 + 1] = dat[i + 1];
+ newDat[i * 2 + 2] = dat[i];
+ newDat[i * 2 + 3] = dat[i + 1];
+ }
+ if (dat != NULL) {
+ delete[] dat;
+ }
+ dat = newDat;
+ stereo = YSTRUE;
+ sizeInBytes *= 2;
+ return YSOK;
+ }
+ }
+ return YSERR;
+}
+
+//YSRESULT YsWavFile::Resample(int newRate)
+YSRESULT YsWavFile::Resample(unsigned int newRate)
+{
+ if (rate != newRate) {
+ const size_t nChannel = (YSTRUE == stereo ? 2 : 1);
+ const size_t bytePerSample = bit / 8;
+ const size_t bytePerTimeStep = nChannel * bytePerSample;
+ const size_t curNTimeStep = sizeInBytes / bytePerTimeStep;
+
+ const size_t newNTimeStep = curNTimeStep * newRate / rate;
+ const size_t newSize = newNTimeStep * bytePerTimeStep;
+
+ unsigned char *newDat;
+ newDat = (0 < newSize ? new unsigned char[newSize] : NULL);
+
+ if (NULL != newDat) {
+ for (size_t ts = 0; ts < newNTimeStep; ts++) {
+ double oldTimeStepD = (double) curNTimeStep * (double) ts /
+ (double) newNTimeStep;
+ size_t oldTimeStep = (size_t) oldTimeStepD;
+ double param = fmod(oldTimeStepD, 1.0);
+ unsigned char *newTimeStepPtr = newDat + ts * bytePerTimeStep;
+
+ for (size_t ch = 0; ch < nChannel; ++ch) {
+ if (curNTimeStep - 1 <= oldTimeStep) {
+ const int value =
+ GetSignedValue(curNTimeStep - 1, ch);
+ SetSignedValue(newTimeStepPtr + bytePerSample * ch,
+ value);
+ }
+ else if ((0 == oldTimeStep) ||
+ (curNTimeStep - 2 <= oldTimeStep)) {
+ const double value[2] = {
+ (double) GetSignedValue(oldTimeStep, ch),
+ (double) GetSignedValue(oldTimeStep + 1, ch)
+ };
+ const int newValue = (int)
+ (value[0] * (1.0 - param) + value[1] * param);
+ SetSignedValue(newTimeStepPtr + bytePerSample * ch,
+ newValue);
+ }
+ else {
+ const double v[4] = {
+ // At x=-1.0
+ (double) GetSignedValue(oldTimeStep - 1, ch),
+ // At x= 0.0
+ (double) GetSignedValue(oldTimeStep, ch),
+ // At x= 1.0
+ (double) GetSignedValue(oldTimeStep + 1, ch),
+ // At x= 2.0
+ (double) GetSignedValue(oldTimeStep + 2, ch)
+ };
+
+ // Cubic interpolation. Linear didn't work well.
+ // axxx+bxx+cx+d=e
+ // x=-1 -> -a+b-c+d=v0 (A)
+ // x= 0 -> d=v1 (B)
+ // x= 1 -> a+b+c+d=v2 (C)
+ // x= 2 -> 8a+4b+2c+d=v3 (D)
+ //
+ // (B) => d=v1;
+ // (A)+(C) => 2b+2d=v0+v2 => b=(v0+v2-2d)/2
+ //
+ // (D)-2*(B) => 6a+2b-d=v3-2*v2
+ // => a=(v3-2*v2-2b+d)/6
+
+ const double d = v[1];
+ const double b = (v[0] + v[2] - 2.0 * d) / 2.0;
+ const double a =
+ (v[3] - 2.0 * v[2] - 2.0 * b + d) / 6.0;
+ const double c = v[2] - a - b - d;
+
+ double newValue = a * param * param * param
+ + b * param * param + c * param + d;
+ SetSignedValue(newTimeStepPtr + bytePerSample * ch,
+ (int) newValue);
+ }
+ }
+ }
+ }
+
+ rate = newRate;
+ if (dat != NULL) {
+ delete[] dat;
+ }
+ dat = newDat;
+ sizeInBytes = newSize;
+ }
+ return YSOK;
+}
+
+YSRESULT YsWavFile::ConvertToMono(void)
+{
+ if (YSTRUE == stereo) {
+ const size_t bytePerSample = bit / 8;
+ const size_t bytePerTimeStep = 2 * bytePerSample;
+ const size_t nTimeStep = sizeInBytes / bytePerTimeStep;
+
+ const size_t newSize = nTimeStep * bytePerSample;
+
+ unsigned char *newDat;
+ newDat = (0 < newSize ? new unsigned char[newSize] : NULL);
+ if (NULL != newDat) {
+ for (size_t ts = 0; ts < nTimeStep; ts++) {
+ const int newValue =
+ (GetSignedValue(ts, 0) + GetSignedValue(ts, 1)) / 2;
+ unsigned char *const newTimeStepPtr =
+ newDat + ts * bytePerSample;
+ SetSignedValue(newTimeStepPtr, newValue);
+ }
+
+ if (dat != NULL) {
+ delete[] dat;
+ }
+ dat = newDat;
+ sizeInBytes = newSize;
+ stereo = YSFALSE;
+
+ return YSOK;
+ }
+ }
+ return YSERR;
+}
+
+YSRESULT YsWavFile::ConvertToSigned(void)
+{
+ if (isSigned == YSTRUE) {
+ return YSOK;
+ }
+ else {
+ if (bit == 8) {
+// for (int i = 0; i < sizeInBytes; i++)
+ for (unsigned int i = 0; i < sizeInBytes; i++) {
+ dat[i] -= 128;
+ }
+ }
+ else if (bit == 16) {
+// for (int i = 0; i < sizeInBytes-1; i+=2)
+ for (unsigned int i = 0; i < sizeInBytes - 1; i += 2) {
+ int d;
+ d = dat[i] + dat[i + 1] * 256;
+ d -= 32768;
+ dat[i] = d & 255;
+ dat[i + 1] = (d >> 8) & 255;
+ }
+ }
+ isSigned = YSTRUE;
+ }
+ return YSOK;
+}
+
+YSRESULT YsWavFile::ConvertToUnsigned(void)
+{
+ if (isSigned != YSTRUE) {
+ return YSOK;
+ }
+ else {
+ if (bit == 8) {
+// for (int i = 0; i < sizeInBytes; i++)
+ for (unsigned int i = 0; i < sizeInBytes; i++) {
+ dat[i] += 128;
+ }
+ }
+ else if (bit == 16) {
+// for (int i = 0; i < sizeInBytes-1; i+=2)
+ for (unsigned int i = 0; i < sizeInBytes - 1; i += 2) {
+ int d = dat[i] + dat[i + 1] * 256;
+ if (d >= 32768) {
+ d -= 65536;
+ }
+ d += 32768;
+ dat[i] = d & 255;
+ dat[i + 1] = (d >> 8) & 255;
+ }
+ }
+ isSigned = YSFALSE;
+ }
+ return YSOK;
+}
+
+//int main(int ac,char *av[])
+//{
+// YsWavFile test;
+// test.LoadWav(av[1]);
+// return 0;
+//}
+
+int YsWavFile::GetNumChannel(void) const
+{
+ return (YSTRUE == stereo ? 2 : 1);
+}
+
+int YsWavFile::GetNumSample(void) const
+{
+ return sizeInBytes * 8 / bit;
+}
+
+int YsWavFile::GetNumSamplePerChannel(void) const
+{
+ return GetNumSample() / GetNumChannel();
+}
+
+size_t YsWavFile::GetUnitSize(void) const
+{
+ return BytePerSample() * GetNumChannel();
+}
+
+size_t YsWavFile::GetSamplePosition(int atIndex) const
+{
+ return atIndex * GetNumChannel() * (bit / 8);
+}
+
+int YsWavFile::GetSignedValue(int atTimeStep, int channel) const
+{
+ const size_t sampleIdx = GetSamplePosition(atTimeStep);
+ const size_t unitSize = GetUnitSize();
+
+ if ((sampleIdx + unitSize <= sizeInBytes) &&
+ (0 <= channel) && (channel < GetNumChannel())) {
+ int rawSignedValue = 0;
+ size_t offset = sampleIdx + channel * BytePerSample();
+ switch (BitPerSample()) {
+ case 8:
+ if (YSTRUE == isSigned) {
+ rawSignedValue = dat[offset];
+ if (128 <= rawSignedValue) {
+ rawSignedValue -= 256;
+ }
+ }
+ else {
+ rawSignedValue = dat[offset] - 128;
+ }
+ break;
+ case 16:
+ // Assume little endian
+ rawSignedValue = dat[offset] + 256 * dat[offset + 1];
+ if (YSTRUE == isSigned) {
+ if (32768 <= rawSignedValue) {
+ rawSignedValue -= 65536;
+ }
+ }
+ else {
+ rawSignedValue -= 32768;
+ }
+ break;
+ }
+ return rawSignedValue;
+ }
+ return 0;
+}
+
+void YsWavFile::SetSignedValue(unsigned char *savePtr, int rawSignedValue)
+{
+ switch (bit) {
+ case 8:
+ if (rawSignedValue < -128) {
+ rawSignedValue = -128;
+ }
+ else if (127 < rawSignedValue) {
+ rawSignedValue = 127;
+ }
+ if (YSTRUE == isSigned) {
+ if (0 > rawSignedValue) {
+ rawSignedValue += 256;
+ }
+ *savePtr = (unsigned char) rawSignedValue;
+ }
+ else {
+ rawSignedValue += 128;
+ *savePtr = (unsigned char) rawSignedValue;
+ }
+ break;
+ case 16:
+ if (-32768 > rawSignedValue) {
+ rawSignedValue = -32768;
+ }
+ else if (32767 < rawSignedValue) {
+ rawSignedValue = 32767;
+ }
+
+ if (YSTRUE == isSigned) {
+ if (0 > rawSignedValue) {
+ rawSignedValue += 65536;
+ }
+ }
+ else {
+ rawSignedValue += 32768;
+ }
+
+ // Assume little endian (.WAV is supposed to use little endian).
+ savePtr[0] = (rawSignedValue & 255);
+ savePtr[1] = ((rawSignedValue >> 8) & 255);
+ break;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Sound Sample APP
+ * Test use with which sound is sounded
+ *
+ * @date Mar-04-2013
+ */
+
+#ifndef YSWAVFILE_IS_INCLUDED
+#define YSWAVFILE_IS_INCLUDED
+/* { */
+
+#ifndef YSRESULT_IS_DEFINED
+#define YSRESULT_IS_DEFINED
+/*! Enum for processing result. */
+typedef enum
+{
+ YSERR, /*!< There were error(s). */
+ YSOK /*!< The process was successful. */
+} YSRESULT;
+#endif
+
+#ifndef YSBOOL_IS_DEFINED
+#define YSBOOL_IS_DEFINED
+/*! Enum for boolearn. */
+typedef enum
+{
+ YSFALSE, /*!< False */
+ YSTRUE, /*!< True */
+ YSTFUNKNOWN /*!< Unable to tell true or false. */
+} YSBOOL;
+#endif
+
+class YsWavFile
+{
+ private:
+ YSBOOL stereo;
+ unsigned int bit;
+ unsigned int rate;
+ unsigned int sizeInBytes;
+
+ YSBOOL isSigned;
+ unsigned char *dat;
+
+ public:
+ YsWavFile();
+ ~YsWavFile();
+
+ void Initialize(void);
+
+ unsigned int NTimeStep(void) const;
+
+ YSBOOL Stereo(void) const;
+ unsigned int BytePerTimeStep(void) const;
+ unsigned int BitPerSample(void) const;
+ unsigned int BytePerSample(void) const;
+ unsigned int PlayBackRate(void) const;
+ unsigned int SizeInByte(void) const;
+ YSBOOL IsSigned(void) const;
+ const unsigned char *DataPointer(void) const;
+ const unsigned char *DataPointerAtTimeStep(unsigned int ts) const;
+
+ YSRESULT LoadWav(const char fn[]);
+ YSRESULT ConvertTo16Bit(void);
+ YSRESULT ConvertTo8Bit(void);
+ YSRESULT ConvertToStereo(void);
+ YSRESULT ConvertToMono(void);
+// YSRESULT Resample(int newRate);
+ YSRESULT Resample(unsigned int newRate);
+
+ YSRESULT ConvertToSigned(void);
+ YSRESULT ConvertToUnsigned(void);
+
+ private:
+ int GetNumChannel(void) const;
+ int GetNumSample(void) const;
+ int GetNumSamplePerChannel(void) const;
+ size_t GetUnitSize(void) const;
+ size_t GetSamplePosition(int atIndex) const;
+ int GetSignedValue(int atTimeStep, int channel) const;
+ void SetSignedValue(unsigned char *savePtr, int rawSignedValue);
+};
+
+
+/* } */
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0. The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+/**
+ * @brief Vehicles Sample APP
+ * Vehicles information is displayed.
+ *
+ * @date Mar-04-2013
+ */
+
+#ifdef HAVE_CONFIG_H
+
+#include "config.h"
+#define __UNUSED__
+#else
+#define __UNUSED__
+#endif
+
+//#include <VehicleInfo.h>
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+
+#include <dbus/dbus.h> /* dbus */
+#include <string.h> /* test log output */
+#include <stdbool.h> // bool type define //TEST
+//#include "app_log.h"
+#include "ico_apf.h"
+#include "ico_apf_ecore.h"
+#include "ico_apf_log.h"
+//#include "ico_uxf_conf_common.h"
+/* macro for debug */
+//#define DEBUG_PRINT(...) ICO_UXF_DEBUG(__VA_ARGS__)
+//#define ERROR_PRINT(...) ICO_UXF_WARN(__VA_ARGS__)
+
+#if 0
+// log output define
+#include <unistd.h>
+
+#define DEBUG_PRINT(...) LOG_PRINT(__VA_ARGS__)
+#define LOG_PRINT(fmt,...) \
+ {log_print("%s> "fmt" (%s,%s:%d)\n", log_curtime("DBG"), ##__VA_ARGS__,\
+ __func__, __FILE__, __LINE__); }
+
+static FILE *sDbgFd = (FILE *) 0;
+void log_print(const char *fmt, ...)
+{
+ va_list list;
+
+ va_start(list, fmt);
+ vfprintf(sDbgFd, fmt, list);
+ va_end(list);
+ fflush(sDbgFd);
+}
+
+/* local time difference(sec) */
+static int sTimeZone = (99 * 60 * 60);
+
+char *log_curtime(const char *level)
+{
+
+ struct timeval NowTime;
+ extern long timezone;
+ static char sBuf[28];
+
+ gettimeofday(&NowTime, (struct timezone *) 0);
+ if (sTimeZone > (24 * 60 * 60)) {
+ tzset();
+ sTimeZone = timezone;
+ }
+ NowTime.tv_sec -= sTimeZone;
+
+ sprintf(sBuf, "%02d:%02d:%02d.%03d[%s]@%d",
+ (int) ((NowTime.tv_sec / 3600) % 24),
+ (int) ((NowTime.tv_sec / 60) % 60),
+ (int) (NowTime.tv_sec % 60),
+ (int) NowTime.tv_usec / 1000, level, getpid());
+
+ return (sBuf);
+}
+#endif
+
+/*============================================================================*/
+/* Define fixed parameters */
+/*============================================================================*/
+#define WIDTH (700) /* Background width */
+#define HEIGHT (934) /* Background height */
+
+/* Count vehicle information */
+static int property_num = 0;
+
+/* max size of vehicle information */
+#define MAX_PARA_NUM 32
+
+/* vehicle information ID */
+#define VEHICLESPEED 0
+#define ACCELERATIONX 1
+#define SHIFTPOSITION 2
+#define ENGINESPEED 3
+#define LATITUDE 4
+#define ALTITUDE 5
+#define GEARPOSITION 6
+#define LONGITUDE 7
+#define MODE 8
+
+#define DIRECTION 9
+#define BRAKEPRESSURE 10
+#define LEFTTURN 11
+#define RIGHTTURN 12
+#define BRAKESIGNAL 13
+
+/* Definition for use with D-Bus */
+#define DBUS_SERVICE "org.automotive.message.broker"
+#define DBUS_INTERFACE "org.freedesktop.DBus.Properties"
+#define DBUS_METHOD "Get"
+
+/* Definition for files */
+//#define CONFIG_FILE "/home/rpf/src/app/vic_inf_dspTP/vicsample_config.txt"
+//#define TMP_LOG "/home/rpf/var/log/uifw/tmp_vic_inf_dspTP.log"
+//#define LOG_NAME "/home/rpf/var/log/uifw/vic_inf_dspTP.log"
+#define CONFIG_FILE "/opt/apps/org.tizen.ico.app-vicsample/res/vicsample_config.txt"
+#define TMP_LOG "/tmp/tmp_ico-app-vicsample.log"
+#define LOG_NAME "/tmp/ico-app-vicsample.log"
+
+
+/* coordinates of vehicle information table frame */
+#define VTX_SX 50.0F /* X position of the upper left corner */
+#define VTX_SY 30.0F /* Y position of the upper left corner */
+#define VTX_EX 650.0F /* X position of the lower right */
+#define VTX_EY 830.0F /* Y position of the lower right */
+#define FIX_LINE_NUM 6 /* The number of lines of the table */
+ /* Percentage of the column 13 = 1+4+4+4 */
+ /* No.[1]:Name(JP)[4]:Name(EN)[4]:Value[4] */
+#define FIX_SEQ_BASE (VTX_EX - VTX_SX) / 13
+ /* X position of the 1st frame vertical line */
+#define FIX_SEQ_LINE1 VTX_SX + FIX_SEQ_BASE
+ /* X position of the 2nd frame vertical line */
+#define FIX_SEQ_LINE2 FIX_SEQ_LINE1 + (FIX_SEQ_BASE * 4)
+ /* X position of the 3rd frame vertical line */
+#define FIX_SEQ_LINE3 FIX_SEQ_LINE2 + (FIX_SEQ_BASE * 4)
+
+/* Horizontal line interval size */
+#define UFIX_LINE_BASE (VTX_EY - VTX_SY)/MAX_PARA_NUM
+
+/*============================================================================*/
+/* Define data types */
+/*============================================================================*/
+union VicVal_t
+{
+ dbus_int32_t i32_val;
+ dbus_int32_t i16_val;
+ dbus_uint32_t u32_val;
+ dbus_uint16_t u16_val;
+ uint8_t byte_val;
+ dbus_bool_t b_val;
+ double d_val;
+ char *s_val;
+};
+
+struct vic_data_t
+{
+ int property;
+ char name[32];
+ char path_name[64];
+ char interface_name[64];
+ char property_name[32];
+};
+
+struct vic_key_data_t
+{
+ int id;
+ char name[32];
+};
+
+/*============================================================================*/
+/* Function prototype for static(internal) functions */
+/*============================================================================*/
+static void _canvas_resize_cb(Ecore_Evas *ee);
+static void _on_destroy(Ecore_Evas *ee __UNUSED__);
+static Eina_Bool _timer_cb(void *data);
+static void cmdlog_output(int key);
+static void drawVehicleInfo(void);
+static void _on_mousedown(void *data, Evas *evas, Evas_Object *o,
+ void *einfo);
+static int getVehicleInfo(int key, union VicVal_t *vic_val_p);
+static bool parse_elementary_value(union VicVal_t *vic_val_p,
+ DBusMessageIter *iter);
+// TEST
+static bool parse_value(union VicVal_t *vic_val_p, DBusMessageIter *iter);
+// TEST
+static bool parse_dict_entry(union VicVal_t *vic_val_p,
+ DBusMessageIter *iter);
+// TEST
+static bool parse_array(union VicVal_t *vic_val_p, DBusMessageIter *iter);
+// TEST
+static bool parse_struct(union VicVal_t *vic_val_p, DBusMessageIter *iter);
+static int get_config(void);
+
+/*============================================================================*/
+/* Tables and Valiables */
+/*============================================================================*/
+const static char Bus_name[] = DBUS_SERVICE;
+static struct vic_data_t vic_data[MAX_PARA_NUM];
+
+const struct vic_key_data_t vic_key_data[] = {
+ {VEHICLESPEED, "VehicleSpeed"},
+ {ACCELERATIONX, "AccelerationX"},
+ {SHIFTPOSITION, "ShiftPosition"},
+ {ENGINESPEED, "EngineSpeed"},
+ {LATITUDE, "Latitude"},
+ {ALTITUDE, "Altitude"},
+ {GEARPOSITION, "GearPosition"},
+ {LONGITUDE, "Longitude"},
+ {MODE, "Mode"},
+ {DIRECTION, "Direction"},
+ {BRAKEPRESSURE, "BrakePressure"},
+ {LEFTTURN, "LeftTurn"},
+ {RIGHTTURN, "RightTurn"},
+ {BRAKESIGNAL, "BrakeSignal"},
+ {-1, "END"}
+};
+
+/* Storage area of vehicle information */
+static union VicVal_t s_vic_val[MAX_PARA_NUM];
+/* Object for displaying vehicle information */
+static Evas_Object *vic_val_text[MAX_PARA_NUM];
+
+/* Table border line */
+const static Evas_Coord f_vtx[FIX_LINE_NUM][4] = {
+ {VTX_SX, VTX_SY, VTX_SX, VTX_EY}, // Border of the Left frame
+ {VTX_EX, VTX_SY, VTX_EX, VTX_EY}, // Border of the Right frame
+ {VTX_SX, VTX_SY, VTX_EX, VTX_SY}, // Border of the upper frame
+ {VTX_SX, VTX_EY, VTX_EX, VTX_EY}, // Border of the lower frame
+
+ {FIX_SEQ_LINE1, VTX_SY, FIX_SEQ_LINE1, VTX_EY}, // Border of the column 1
+ {FIX_SEQ_LINE2, VTX_SY, FIX_SEQ_LINE2, VTX_EY}, // Border of the column 2
+//{FIX_SEQ_LINE3, VTX_SY, FIX_SEQ_LINE3, VTX_EY} // Border of the column 3
+};
+
+//#define WIDTH (300)
+//#define HEIGHT (300)
+
+static Ecore_Evas *ee;
+static Evas_Object *text, *bg;
+static char sscrntype[32];
+
+static const char commands[] =
+ "commands are:\n"
+ "\tm - impose a minumum size to the window\n"
+ "\tx - impose a maximum size to the window\n"
+ "\tb - impose a base size to the window\n"
+ "\ts - impose a step size (different than 1 px) to the window\n"
+ "\th - print help\n";
+
+/* to inform current window's size */
+static void _canvas_resize_cb(Ecore_Evas *ee)
+{
+ int w, h;
+ char buf[256];
+
+ ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
+ snprintf(buf, sizeof(buf), "%s %d x %d", sscrntype, w, h);
+ evas_object_text_text_set(text, buf);
+ evas_object_move(text, VTX_SX, VTX_SY - 22);
+ evas_object_resize(bg, w, h);
+}
+
+static void _on_destroy(Ecore_Evas *ee __UNUSED__)
+{
+ ecore_main_loop_quit();
+}
+
+/* drawing current time */
+static Eina_Bool _timer_cb(void *data)
+{
+ char str[32];
+ time_t timer;
+ struct tm *date;
+ timer = time(NULL); /* get time in seconds */
+ date = localtime(&timer); /* Converted to calendar time */
+ sprintf(str, "%s", asctime(date));
+ evas_object_text_text_set((Evas_Object *) data, str);
+
+// drawVehicleInfo(); /* Get the vehicle information than AMB */ TEST
+
+ return EINA_TRUE; /* Continuation of the timer */
+}
+
+/* log output for DBUS command result (Debug functin) */
+static void cmdlog_output(int key)
+{
+#if 0
+ char mes1[] =
+ "dbus-send --system --dest=org.automotive.message.broker --type=method_call --print-reply";
+ char mes2[] = "org.freedesktop.DBus.Properties.Get";
+ char mes3[] = "string:";
+ char str[1024];
+ sprintf(str, "%s %s %s %s\"%s\" %s\"%s\" > %s",
+ mes1, vic_data[key].path_name, mes2, mes3,
+ vic_data[key].interface_name, mes3, vic_data[key].property_name,
+ TMP_LOG);
+
+ DEBUG_PRINT("%s(D-bus Command Result)", vic_data[key].name);
+ system(str);
+
+ /* logout */
+ log_output();
+#endif
+ return;
+}
+
+static void drawVehicleInfo()
+{
+ union VicVal_t vic_val[32];
+ int result = 0;
+ int i;
+ char vic_str[256];
+
+ for (i = 0; i < property_num; i++) {
+ result = getVehicleInfo(i, vic_val);
+
+ if (result != 0) {
+ uim_debug("Err getVehicleInfo : %s", vic_data[i].name);
+ continue;
+ }
+
+ switch (vic_data[i].property) {
+ case VEHICLESPEED:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].i32_val);
+ cmdlog_output(i);
+
+// if (vic_val[0].i32_val != s_vic_val[i].i32_val) {
+// uim_debug("%s update Front:%d Back:%d", vic_data[i].name,
+// s_vic_val[i].i32_val, vic_val[0].i32_val);
+ s_vic_val[i].i32_val = vic_val[0].i32_val;
+
+ /* Drawing update */
+ sprintf(vic_str, "%d", vic_val[0].i32_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+
+// }
+// else {
+// uim_debug("%s no update:%d", vic_data[i].name,
+// vic_val[0].i32_val);
+// }
+
+ break;
+
+ case ACCELERATIONX:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].u16_val);
+ cmdlog_output(i);
+
+// if (vic_val[0].u16_val != s_vic_val[i].u16_val) {
+// uim_debug("%s update Front:%d Back:%d", vic_data[i].name,
+// s_vic_val[i].u16_val, vic_val[0].u16_val);
+ s_vic_val[i].u16_val = vic_val[0].u16_val;
+
+ /* Drawing update */
+ sprintf(vic_str, "%d", vic_val[0].i32_val);
+ sprintf(vic_str, "%d", vic_val[0].u16_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+// }
+// else {
+// uim_debug("%s no update:%d", vic_data[i].name,
+// vic_val[0].u16_val);
+// }
+
+ break;
+
+ case SHIFTPOSITION:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].byte_val);
+ cmdlog_output(i);
+
+// if (vic_val[0].byte_val != s_vic_val[i].byte_val) {
+// uim_debug("%s update Front:%d Back:%d", vic_data[i].name,
+// s_vic_val[i].byte_val, vic_val[0].byte_val);
+ s_vic_val[i].byte_val = vic_val[0].byte_val;
+
+ /* Drawing update */
+ sprintf(vic_str, "%d", vic_val[0].byte_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+// }
+// else {
+// uim_debug("%s noupdate:%d", vic_data[i].name,
+// vic_val[0].byte_val);
+// }
+
+ break;
+
+ case ENGINESPEED:
+ case DIRECTION:
+ case BRAKEPRESSURE:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].i32_val);
+ cmdlog_output(i);
+ s_vic_val[i].i32_val = vic_val[0].i32_val;
+ sprintf(vic_str, "%d", vic_val[0].i32_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+ break;
+
+ case LATITUDE:
+ case ALTITUDE:
+ case LONGITUDE:
+ uim_debug("%s(D-bus I/F Result) = %f", vic_data[i].name,
+ vic_val[0].d_val);
+ cmdlog_output(i);
+ s_vic_val[i].d_val = vic_val[0].d_val;
+ sprintf(vic_str, "%f", vic_val[0].d_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+ break;
+
+ case GEARPOSITION:
+ case MODE:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].byte_val);
+ cmdlog_output(i);
+ s_vic_val[i].byte_val = vic_val[0].byte_val;
+ sprintf(vic_str, "%d", vic_val[0].byte_val);
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+ break;
+
+ case LEFTTURN:
+ case RIGHTTURN:
+ case BRAKESIGNAL:
+ uim_debug("%s(D-bus I/F Result) = %d", vic_data[i].name,
+ vic_val[0].b_val);
+ cmdlog_output(i);
+ s_vic_val[i].b_val = vic_val[0].b_val;
+ if (vic_val[0].b_val == TRUE) {
+ sprintf(vic_str, "%s", "true");
+ }
+ else {
+ sprintf(vic_str, "%s", "false");
+ }
+ evas_object_text_text_set(vic_val_text[i], vic_str);
+ break;
+
+ default:
+ uim_debug("Err no property : %s\n", vic_data[i].name);
+ break;
+ }
+ }
+ return;
+}
+
+static void _on_mousedown(void *data, Evas *evas, Evas_Object *o,
+ void *einfo)
+{
+ drawVehicleInfo();
+ return;
+}
+
+/* Get the vehicle information than AMB */
+DBusConnection *g_connection = NULL;
+static int getVehicleInfo(int key, union VicVal_t *vic_val_p)
+{
+ /* local variable */
+ DBusMessage *message;
+ DBusError error;
+ int result = 0;
+ const char *v_string[] = {
+ vic_data[key].interface_name,
+ vic_data[key].property_name
+ };
+ const char *dest = Bus_name;
+ DBusMessage *reply;
+ int reply_timeout = 1000; /* Millisecond */
+ DBusMessageIter iter;
+ DBusMessageIter iter_array;
+
+ /* initialize */
+ dbus_error_init(&error);
+
+ if (NULL == g_connection) {
+ /* obtain the right to use dbus */
+ g_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
+
+ if (g_connection == NULL) {
+ uim_debug("Err dbus_bus_get");
+
+ /* Release err parameter */
+ dbus_error_free(&error);
+ return -1;
+ }
+ }
+ /* Constructs a new message */
+ message = dbus_message_new_method_call(DBUS_SERVICE,
+ vic_data[key].path_name,
+ DBUS_INTERFACE, DBUS_METHOD);
+ if (message == NULL) {
+ uim_debug("Err dbus_message_new_method_call");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ return -1;
+ }
+
+ /* Gets the type of a message */
+ result = dbus_message_append_args(message,
+ DBUS_TYPE_STRING,
+ &v_string[0],
+ DBUS_TYPE_STRING,
+ &v_string[1], DBUS_TYPE_INVALID);
+ if (!result) {
+ uim_debug("Err dbus_message_append_args");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ /* Release the message */
+ dbus_message_unref(message);
+
+ return -1;
+ }
+
+ /* Gets the error name */
+ if ((dest) && (!dbus_message_set_destination(message, dest))) {
+ uim_debug("Err dbus_message_new_method_call");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+
+ return -1;
+ }
+
+ /* Queues a message to send */
+ reply = dbus_connection_send_with_reply_and_block(g_connection,
+ message,
+ reply_timeout, &error);
+ if (reply == NULL) {
+ uim_debug("Err dbus_connection_send_with_reply_and_block");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+
+ /* Release err parameter */
+ dbus_error_free(&error);
+
+ return -1;
+ }
+
+ /* Gets the result */
+ dbus_message_iter_init(reply, &iter);
+ dbus_message_iter_recurse(&iter, &iter_array);
+
+ /* Type conversion of the resulting value */
+// result = parse_elementary_value(vic_val_p, &iter_array);
+ union VicVal_t *tmp_vic_val_p = vic_val_p; //TEST
+ result = parse_value(tmp_vic_val_p, &iter_array); //TEST
+
+ if (result != TRUE) {
+ uim_debug("Err parse_elementary_value");
+
+ /* Release the connection */
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+
+ /* Release the message */
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ return -1;
+ }
+
+ /* Release the message */
+ dbus_message_unref(message);
+ dbus_message_unref(reply);
+
+ return 0;
+}
+
+/* Parse of the value */
+static bool parse_elementary_value(union VicVal_t *vic_val_p,
+ DBusMessageIter *iter)
+{
+ dbus_int32_t i32_val;
+ dbus_int32_t i16_val;
+ dbus_uint32_t u32_val;
+ dbus_uint16_t u16_val;
+ uint8_t byte_val;
+ dbus_bool_t b_val;
+ double d_val;
+ char *s_val;
+ char *w_s_val;
+
+ char sig;
+
+ if ((vic_val_p == NULL) || (iter == NULL)) {
+ uim_debug("Err Parameter NG ");
+ return FALSE;
+ }
+
+ sig = dbus_message_iter_get_arg_type(iter);
+
+ switch (sig) {
+ case DBUS_TYPE_INT32:
+ dbus_message_iter_get_basic(iter, &i32_val);
+ vic_val_p->i32_val = i32_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_INT16:
+ dbus_message_iter_get_basic(iter, &i16_val);
+ vic_val_p->i16_val = i16_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_UINT32:
+ dbus_message_iter_get_basic(iter, &u32_val);
+ vic_val_p->u32_val = u32_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_UINT16:
+ dbus_message_iter_get_basic(iter, &u16_val);
+ vic_val_p->u16_val = u16_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_BOOLEAN:
+ dbus_message_iter_get_basic(iter, &b_val);
+ vic_val_p->b_val = b_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_BYTE:
+ dbus_message_iter_get_basic(iter, &byte_val);
+ vic_val_p->byte_val = byte_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_DOUBLE:
+ dbus_message_iter_get_basic(iter, &d_val);
+ vic_val_p->d_val = d_val;
+ vic_val_p++;
+ break;
+ case DBUS_TYPE_STRING:
+ dbus_message_iter_get_basic(iter, &s_val);
+ w_s_val = (char *) malloc(strlen(s_val) + 1); // Release required
+ if (w_s_val == NULL) {
+ uim_debug("Err malloc");
+ return FALSE;
+ }
+ strncpy(w_s_val, s_val, strlen(s_val));
+ vic_val_p->s_val = w_s_val;
+ vic_val_p++;
+// vic_val_p->s_val = s_val;
+ break;
+ default:
+ uim_debug("Err parse_elementary_value: unknown type");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool parse_value(union VicVal_t *vic_val_p, DBusMessageIter *iter)
+{
+ char curr;
+
+ if ((vic_val_p == NULL) || (iter == NULL)) {
+ uim_debug("Err Parameter NG ");
+ return FALSE;
+ }
+
+ curr = dbus_message_iter_get_arg_type(iter);
+
+ switch (curr) {
+ case DBUS_TYPE_BYTE:
+ case DBUS_TYPE_BOOLEAN:
+ case DBUS_TYPE_INT16:
+ case DBUS_TYPE_INT32:
+ case DBUS_TYPE_UINT16:
+ case DBUS_TYPE_UINT32:
+ case DBUS_TYPE_DOUBLE:
+ case DBUS_TYPE_STRING:
+ return parse_elementary_value(vic_val_p, iter);
+ case DBUS_TYPE_ARRAY:
+ return parse_array(vic_val_p, iter);
+ case DBUS_TYPE_STRUCT:
+ return parse_struct(vic_val_p, iter);
+ case DBUS_TYPE_DICT_ENTRY:
+// goto error; /* these are handled from parse_array */
+ return FALSE;
+ case DBUS_TYPE_INVALID:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+static bool parse_array(union VicVal_t *vic_val_p, DBusMessageIter *iter)
+{
+ DBusMessageIter new_iter;
+ int element_type;
+
+ if ((vic_val_p == NULL) || (iter == NULL)) {
+ uim_debug("Err Parameter NG ");
+ return FALSE;
+ }
+
+ /* the lua array */
+// lua_newtable(L);
+
+ element_type = dbus_message_iter_get_element_type(iter);
+
+ dbus_message_iter_recurse(iter, &new_iter);
+
+ /* the problem: if the value inside array is a dict entry, the
+ * indexing of elements need to be done with dict keys instead
+ * of numbers. */
+
+ if (element_type == DBUS_TYPE_DICT_ENTRY) {
+ while (dbus_message_iter_get_arg_type(&new_iter) != DBUS_TYPE_INVALID) {
+
+ parse_dict_entry(vic_val_p, &new_iter);
+ dbus_message_iter_next(&new_iter);
+ }
+ }
+
+ else {
+ while (dbus_message_iter_get_arg_type(&new_iter) != DBUS_TYPE_INVALID) {
+
+ /* array index */
+// lua_pushinteger(L, i++);
+
+ parse_value(vic_val_p, &new_iter);
+ dbus_message_iter_next(&new_iter);
+
+ /* put the values to the table */
+// lua_settable(L, -3);
+ }
+ }
+
+ return TRUE;
+}
+
+static bool parse_dict_entry(union VicVal_t *vic_val_p,
+ DBusMessageIter *iter)
+{
+ DBusMessageIter new_iter;
+
+ if ((vic_val_p == NULL) || (iter == NULL)) {
+ uim_debug("Err Parameter NG ");
+ return FALSE;
+ }
+
+ dbus_message_iter_recurse(iter, &new_iter);
+
+ while (dbus_message_iter_get_arg_type(&new_iter) != DBUS_TYPE_INVALID) {
+
+ /* key must be elementary, value can be anything */
+
+ parse_elementary_value(vic_val_p, &new_iter);
+ dbus_message_iter_next(&new_iter);
+
+ parse_value(vic_val_p, &new_iter);
+ dbus_message_iter_next(&new_iter);
+
+ /* put the values to the table */
+// lua_settable(L, -3);
+ }
+
+ return TRUE;
+}
+
+static bool parse_struct(union VicVal_t *vic_val_p, DBusMessageIter *iter)
+{
+ DBusMessageIter new_iter;
+
+ if ((vic_val_p == NULL) || (iter == NULL)) {
+ uim_debug("Err Parameter NG ");
+ return FALSE;
+ }
+
+ /* initialize the table */
+// lua_newtable(L);
+
+ dbus_message_iter_recurse(iter, &new_iter);
+
+ while (dbus_message_iter_get_arg_type(&new_iter) != DBUS_TYPE_INVALID) {
+
+ /* struct "index" */
+// lua_pushinteger(L, i++);
+
+ parse_value(vic_val_p, &new_iter);
+ dbus_message_iter_next(&new_iter);
+
+ /* put the values to the table */
+// lua_settable(L, -3);
+ }
+
+ return TRUE;
+}
+
+/* Read configuration file */
+static int get_config(void)
+{
+
+ FILE *fp;
+ int k = 0;
+ int j, m;
+ char buff[512];
+ char *tp;
+ char *clm = " \n";
+
+ fp = fopen(CONFIG_FILE, "r");
+ if (fp == NULL) {
+ uim_debug("File open error");
+ return -1;
+ }
+
+ for (m = 0; k < MAX_PARA_NUM; m++) {
+ if (fgets(buff, sizeof(buff) - 2, fp) != NULL) {
+ tp = strtok(buff, clm);
+ if (tp != NULL) {
+ if (tp[0] != '#') {
+ for (j = 0; vic_key_data[j].id != -1; j++) {
+ if (strcmp(tp, vic_key_data[j].name) == 0) {
+ vic_data[k].property = vic_key_data[j].id;
+ strcpy(vic_data[k].name, tp);
+ strcpy(vic_data[k].path_name, strtok(NULL, clm));
+ strcpy(vic_data[k].interface_name,
+ strtok(NULL, clm));
+ strcpy(vic_data[k].property_name,
+ strtok(NULL, clm));
+ uim_debug("vic_data[%d].property=%d", k,
+ vic_data[k].property);
+ uim_debug("vic_data[%d].name=%s", k,
+ vic_data[k].name);
+ uim_debug("vic_data[%d].path_name=%s", k,
+ vic_data[k].path_name);
+ uim_debug("vic_data[%d].interface_name=%s", k,
+ vic_data[k].interface_name);
+ uim_debug("vic_data[%d].property_name=%s", k,
+ vic_data[k].property_name);
+
+ k++;
+ break;
+ }
+ }
+ if (vic_key_data[j].id == -1) {
+ uim_debug("Err vicsample_config.txt Line:%d Unregistered"
+ " parameter name", m + 1);
+ }
+
+ }
+ else {
+ uim_debug
+ ("vicsample_config.txt Line:%d Comment out '#'Discovery",
+ m + 1);
+ }
+ }
+ else {
+ uim_debug("vicsample_config.txt Line:%d Comment out Null line",
+ m + 1);
+ }
+ }
+ else {
+ uim_debug("vicsample_config.txt The end of data reading");
+ break;
+ }
+ }
+ fclose(fp);
+
+ property_num = k;
+ if (property_num == 0) {
+ uim_debug("vicsample_config.txt No valid data");
+ return -1;
+ }
+ return 0;
+}
+
+static void res_callback(ico_apf_resource_notify_info_t *info,
+ void *user_data)
+{
+ int ret;
+
+ uim_debug("##==> Callbacked evt=%d res=%d id=%d bid=%d appid=%s dev=%s"
+ " user_data=%d", info->state, info->resid, info->id,
+ info->bid, info->appid, info->device, (int) user_data);
+ switch (info->state) {
+ case ICO_APF_RESOURCE_STATE_ACQUIRED:
+ case ICO_APF_RESOURCE_STATE_DEPRIVED:
+ case ICO_APF_RESOURCE_STATE_WAITTING:
+ case ICO_APF_RESOURCE_STATE_RELEASED:
+ if (info->resid == ICO_APF_RESID_INT_SCREEN) {
+ ret = ico_apf_resource_reply_int_screen_mode(info->device,
+ info->bid, info->id,
+ 1);
+ uim_debug("##==> callback reply int_screen(%s,%d,%d,1) = %d",
+ info->device, info->bid, info->id, ret);
+ }
+ else if (info->resid == ICO_APF_RESID_ON_SCREEN) {
+ ret = ico_apf_resource_reply_int_screen_mode_disp(info->device,
+ info->id, 1);
+ uim_debug("##==> callback reply on_screen(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ else {
+ ret =
+ ico_apf_resource_reply_screen_mode(info->device, info->id, 1);
+ uim_debug("##==> callback reply screen(%s,%d,1) = %d",
+ info->device, info->id, ret);
+ }
+ break;
+ default:
+ /* NOP */
+ break;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+ int getscreen;
+ Evas *evas;
+ char appid[ICO_UXF_MAX_PROCESS_NAME + 1];
+
+ getscreen = 0;
+ sscrntype[0] = 0;
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ if (strcasecmp(argv[i], "-basescreen") == 0) {
+ getscreen = 1; /* get base screen */
+ strcpy(sscrntype, "BasicScreen");
+ }
+ else if (strcasecmp(argv[i], "-intscreen") == 0) {
+ getscreen = 2; /* get interrupt screen */
+ strcpy(sscrntype, "IntScreen");
+ }
+ else if (strcasecmp(argv[i], "-onscreen") == 0) {
+ getscreen = 3; /* get on screen */
+ strcpy(sscrntype, "OnScreen");
+ }
+ }
+ }
+
+ if (!ecore_evas_init()) {
+ return EXIT_FAILURE;
+ }
+ /* Setting the log output */
+ if (ico_apf_get_app_id(0, appid) == ICO_APP_CTL_E_NONE) {
+ ico_apf_log_open(appid);
+ }
+
+ uim_debug("main ENTER");
+
+ /* Read configuration file */
+ if (get_config() != 0) {
+ uim_debug("Err get_config");
+ return -1;
+ }
+
+ if (getscreen > 0) {
+ /* initialize resource control for Ecore */
+ if (ico_apf_ecore_init(NULL) != ICO_APF_E_NONE) {
+ uim_debug("ico_apf_ecore_init() Error");
+ ecore_evas_shutdown();
+ return -1;
+ }
+
+ /* set resource request callback */
+ ico_apf_resource_set_event_cb(res_callback, NULL);
+
+ /* acquire a right to display a screen */
+ if (getscreen == 1) {
+ ico_apf_resource_get_screen_mode(NULL, 0);
+ }
+ else if (getscreen == 2) {
+ ico_apf_resource_get_int_screen_mode(NULL, 0, 0);
+ }
+ else {
+ ico_apf_resource_get_int_screen_mode_disp(NULL, 0);
+ }
+ }
+
+ /* this will give you a window with an Evas canvas under the first
+ * engine available */
+ ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, "frame=0");
+ if (!ee) {
+ goto error;
+ }
+
+ ecore_evas_callback_delete_request_set(ee, _on_destroy);
+ ecore_evas_title_set(ee, "Ecore_Evas window sizes example");
+ ecore_evas_callback_resize_set(ee, _canvas_resize_cb);
+ ecore_evas_show(ee);
+
+ evas = ecore_evas_get(ee);
+
+ /* Background printing */
+ bg = evas_object_rectangle_add(evas);
+ evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */
+ evas_object_move(bg, 0, 0); /* at canvas' origin */
+ evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */
+ evas_object_show(bg);
+
+ evas_object_focus_set(bg, EINA_TRUE);
+
+ /* Drawing window */
+ text = evas_object_text_add(evas);
+ evas_object_color_set(text, 255, 0, 0, 255);
+ evas_object_resize(text, 150, 50);
+ evas_object_text_font_set(text, "Sans", 20);
+ evas_object_show(text);
+
+ /* Button on the output drawing vehicle information */
+ static Evas_Object *sikaku;
+ sikaku = evas_object_rectangle_add(evas);
+ evas_object_color_set(sikaku, 255, 0, 0, 100);
+ evas_object_move(sikaku, 50, ((int) VTX_EY) + 7);
+ int hsz = HEIGHT - (int) VTX_EY - 7 - 7;
+ evas_object_resize(sikaku, 200, hsz);
+ evas_object_show(sikaku);
+
+ /* draw table */
+ static Evas_Object *fix_line[FIX_LINE_NUM];
+
+ for (i = 0; i < FIX_LINE_NUM; i++) {
+ fix_line[i] = evas_object_line_add(evas);
+ evas_object_color_set(fix_line[i], 55, 55, 55, 255);
+ evas_object_line_xy_set(fix_line[i], f_vtx[i][0], f_vtx[i][1],
+ f_vtx[i][2], f_vtx[i][3]);
+ evas_object_show(fix_line[i]);
+ }
+
+ /* draw order line */
+ static Evas_Object *ufix_line[MAX_PARA_NUM - 1];
+
+ for (i = 0; i < MAX_PARA_NUM - 1; i++) {
+ ufix_line[i] = evas_object_line_add(evas);
+ evas_object_color_set(ufix_line[i], 55, 55, 55, 255);
+ evas_object_line_xy_set(ufix_line[i],
+ VTX_SX, VTX_SY + UFIX_LINE_BASE * (i + 1),
+ VTX_EX, VTX_SY + UFIX_LINE_BASE * (i + 1));
+ evas_object_show(ufix_line[i]);
+ }
+
+ /* draw table item */
+ static Evas_Object *num_text[MAX_PARA_NUM];
+ char str[11];
+ static Evas_Object *pname_text2[MAX_PARA_NUM];
+
+ for (i = 0; i < MAX_PARA_NUM; i++) {
+ /* draw table item (No.) */
+ num_text[i] = evas_object_text_add(evas);
+ evas_object_color_set(num_text[i], 0, 0, 0, 255);
+ evas_object_resize(num_text[i], FIX_SEQ_BASE, UFIX_LINE_BASE);
+ evas_object_text_font_set(num_text[i], "Sans",
+ (UFIX_LINE_BASE / 3) * 2);
+ evas_object_show(num_text[i]);
+ sprintf(str, "%d", i + 1);
+ evas_object_text_text_set(num_text[i], str);
+ evas_object_move(num_text[i], VTX_SX + FIX_SEQ_BASE / 4,
+ VTX_SY + UFIX_LINE_BASE * (i) + UFIX_LINE_BASE / 6);
+
+ /* draw table item (Name of vehicle information) */
+ pname_text2[i] = evas_object_text_add(evas);
+ evas_object_color_set(pname_text2[i], 0, 0, 0, 255);
+ evas_object_resize(pname_text2[i], 150, 50);
+ evas_object_text_font_set(pname_text2[i], "Sans",
+ (UFIX_LINE_BASE / 3) * 2);
+ evas_object_show(pname_text2[i]);
+ evas_object_text_text_set(pname_text2[i], vic_data[i].name);
+ evas_object_move(pname_text2[i], FIX_SEQ_LINE1 + FIX_SEQ_BASE / 4,
+ VTX_SY + UFIX_LINE_BASE * (i) + UFIX_LINE_BASE / 6);
+
+ /* draw table item (Value of vehicle information) */
+ vic_val_text[i] = evas_object_text_add(evas);
+ evas_object_color_set(vic_val_text[i], 0, 0, 0, 255);
+ evas_object_resize(vic_val_text[i], FIX_SEQ_BASE, UFIX_LINE_BASE);
+ evas_object_text_font_set(vic_val_text[i], "Sans",
+ (UFIX_LINE_BASE / 3) * 2);
+ evas_object_show(vic_val_text[i]);
+ evas_object_move(vic_val_text[i], FIX_SEQ_LINE2 + FIX_SEQ_BASE / 4,
+ VTX_SY + UFIX_LINE_BASE * (i) + UFIX_LINE_BASE / 6);
+ }
+
+ /* entry of the function event callback Vehicle Information */
+ evas_object_event_callback_add(sikaku, EVAS_CALLBACK_MOUSE_DOWN,
+ _on_mousedown, vic_val_text);
+
+ /* drawing current time */
+ static Evas_Object *time_text;
+
+ time_text = evas_object_text_add(evas);
+ evas_object_color_set(time_text, 0, 0, 0, 255);
+ evas_object_resize(time_text, 150, 50);
+ evas_object_text_font_set(time_text, "Sans", 20);
+ evas_object_show(time_text);
+ evas_object_move(time_text, 400, VTX_SY - 22);
+
+ /* entry of the function event Interval Timer */
+ ecore_timer_add(0.1, _timer_cb, time_text);
+
+ _canvas_resize_cb(ee);
+ fprintf(stdout, commands);
+ ecore_main_loop_begin();
+
+ ico_apf_ecore_term();
+
+ ecore_evas_free(ee);
+ ecore_evas_shutdown();
+
+ if (NULL != g_connection) {
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ }
+ uim_debug("main EXIT");
+ return 0;
+
+ error:
+ fprintf(stderr, "You got to have at least one Evas engine built"
+ " and linked up to ecore-evas for this example to run"
+ " properly.\n");
+ ecore_evas_shutdown();
+ if (NULL != g_connection) {
+ dbus_connection_unref(g_connection);
+ g_connection = NULL;
+ }
+ return -1;
+}
--- /dev/null
+# The number of the vehicles information maximum displays 32
+#Name Path Name Interface Name Property Name
+#----------------------------------------------------------------------------------------------------------
+ VehicleSpeed /org/automotive/runningstatus/vehicleSpeed org.automotive.vehicleSpeed VehicleSpeed
+ AccelerationX /org/automotive/runningstatus/acceleration org.automotive.acceleration X
+ ShiftPosition /org/automotive/runningstatus/transmission org.automotive.transmission ShiftPosition
+ EngineSpeed /org/automotive/runningstatus/engineSpeed org.automotive.engineSpeed EngineSpeed
+ Latitude /org/automotive/custom/Latitude org.automotive.Latitude Latitude
+ Longitude /org/automotive/custom/Longitude org.automotive.Longitude Longitude
+ Direction /org/automotive/custom/Direction org.automotive.Direction Direction
+ BrakePressure /org/automotive/custom/BrakePressure org.automotive.BrakePressure BrakePressure
+ LeftTurn /org/automotive/runningstatus/lightStatus org.automotive.lightStatus LeftTurn
+ RightTurn /org/automotive/runningstatus/lightStatus org.automotive.lightStatus RightTurn
+ GearPosition /org/automotive/runningstatus/transmission org.automotive.transmission GearPosition
+ BrakeSignal /org/automotive/runningstatus/wheelBrake org.automotive.wheelBrake Engaged