merge with master
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:18:11 +0000 (01:18 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:18:11 +0000 (01:18 +0900)
44 files changed:
CMakeLists.txt
LICENSE [moved from LICENSE.APLv2 with 100% similarity]
include/feedback-file.h
include/feedback-str.h [new file with mode: 0644]
include/feedback.h
include/xmlparser.h [new file with mode: 0644]
packaging/libfeedback.spec
packaging/svi-data-sdk.manifest [new file with mode: 0644]
src/feedback-internal.c
src/feedback.c
src/svi.c [changed mode: 0644->0755]
src/xmlparser.c [new file with mode: 0644]
svi.pc.in [changed mode: 0644->0755]
svidata/svi/haptic/default/Basic_call.tht [new file with mode: 0755]
svidata/svi/haptic/touch/touch.tht [new file with mode: 0755]
svidata/svi/sound/operation/call_connect.wav [new file with mode: 0755]
svidata/svi/sound/operation/call_disconnect.wav [new file with mode: 0755]
svidata/svi/sound/operation/charger_connection.wav [new file with mode: 0755]
svidata/svi/sound/operation/fully_charged.wav [new file with mode: 0755]
svidata/svi/sound/operation/list_reorder.wav [new file with mode: 0755]
svidata/svi/sound/operation/lock.wav [new file with mode: 0755]
svidata/svi/sound/operation/low_battery.wav [new file with mode: 0755]
svidata/svi/sound/operation/minute_minder.wav [new file with mode: 0755]
svidata/svi/sound/operation/power_on.wav [new file with mode: 0755]
svidata/svi/sound/operation/shutter.wav [new file with mode: 0755]
svidata/svi/sound/operation/slider_sweep.wav [new file with mode: 0755]
svidata/svi/sound/operation/unlock.wav [new file with mode: 0755]
svidata/svi/sound/operation/volume_control.wav [new file with mode: 0755]
svidata/svi/sound/touch/key0.wav [new file with mode: 0755]
svidata/svi/sound/touch/key1.wav [new file with mode: 0755]
svidata/svi/sound/touch/key2.wav [new file with mode: 0755]
svidata/svi/sound/touch/key3.wav [new file with mode: 0755]
svidata/svi/sound/touch/key4.wav [new file with mode: 0755]
svidata/svi/sound/touch/key5.wav [new file with mode: 0755]
svidata/svi/sound/touch/key6.wav [new file with mode: 0755]
svidata/svi/sound/touch/key7.wav [new file with mode: 0755]
svidata/svi/sound/touch/key8.wav [new file with mode: 0755]
svidata/svi/sound/touch/key9.wav [new file with mode: 0755]
svidata/svi/sound/touch/keyasterisk.wav [new file with mode: 0755]
svidata/svi/sound/touch/keysharp.wav [new file with mode: 0755]
svidata/svi/sound/touch/sip.wav [new file with mode: 0755]
svidata/svi/sound/touch/sip_backspace.wav [new file with mode: 0755]
svidata/svi/sound/touch/touch.wav [new file with mode: 0755]
svidata/svi/vibration.xml [new file with mode: 0644]

index ce62db9..ab3a37b 100644 (file)
@@ -7,9 +7,13 @@ SET(LIBDIR "\${prefix}/lib")
 SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
 SET(VERSION 0.1.4)
 
+SET(SVI_DATA_PATH ${CMAKE_CURRENT_SOURCE_DIR}/svidata)
+SET(SVI_DATA_DIRS ${SVI_DATA_PATH}/svi)
+
 SET(SRCS
        src/feedback.c
-       src/feedback-internal.c)
+       src/feedback-internal.c
+       src/xmlparser.c)
 
 SET(HEADERS
        SLP_FEEDBACK_PG.h
@@ -25,7 +29,7 @@ SET(SVI_HEADERS
 SET(SVI_SRCS
        src/svi.c)
 
-SET(DEPENDENTS "vconf haptic mm-keysound dlog")
+SET(DEPENDENTS "vconf haptic mm-keysound dlog libxml-2.0 glib-2.0")
 SET(PC_DEPENDENTS "capi-base-common")
 
 SET(PC_NAME ${PROJECT_NAME})
@@ -68,6 +72,10 @@ FOREACH(hfile ${SVI_HEADERS})
        INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${hfile} DESTINATION include/${SVI_NAME})
 ENDFOREACH(hfile)
 
+FOREACH(svidatadir ${SVI_DATA_DIRS})
+    INSTALL(DIRECTORY ${svidatadir} DESTINATION share)
+ENDFOREACH(svidatadir)
+
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib COMPONENT RuntimeLibraries)
 INSTALL(TARGETS ${SVI_NAME} DESTINATION lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)
similarity index 100%
rename from LICENSE.APLv2
rename to LICENSE
index b86b28d..a6dba6b 100644 (file)
 #ifndef __FEEDBACK_FILE_H__
 #define __FEEDBACK_FILE_H__
 
-#define FEEDBACK_DATA_DIR "/opt/share/svi/"
-#define FEEDBACK_ORIGIN_DATA_DIR "/usr/share/svi/"
+#define FEEDBACK_DATA_DIR                      "/opt/share/svi"
+#define FEEDBACK_ORIGIN_DATA_DIR       "/usr/share/svi"
 
-#define FEEDBACK_SOUND_DIR FEEDBACK_DATA_DIR"sound/"
-#define FEEDBACK_SOUND_TOUCH_DIR FEEDBACK_SOUND_DIR"touch/"
-#define FEEDBACK_SOUND_OPER_DIR FEEDBACK_SOUND_DIR"operation/"
+#define FEEDBACK_SOUND_DIR                     FEEDBACK_DATA_DIR"/sound"
+#define FEEDBACK_SOUND_TOUCH_DIR       FEEDBACK_SOUND_DIR"/touch"
+#define FEEDBACK_SOUND_OPER_DIR                FEEDBACK_SOUND_DIR"/operation"
 
-#define FEEDBACK_HAPTIC_DIR FEEDBACK_DATA_DIR"haptic/"
-#define FEEDBACK_HAPTIC_TOUCH_DIR FEEDBACK_HAPTIC_DIR"touch/"
-#define FEEDBACK_HAPTIC_OPER_DIR FEEDBACK_HAPTIC_DIR"operation/"
-#define FEEDBACK_HAPTIC_NOTI_DIR FEEDBACK_HAPTIC_DIR"notification/"
-#define FEEDBACK_HAPTIC_DEFAULT_DIR FEEDBACK_HAPTIC_DIR"default/"
+#define FEEDBACK_HAPTIC_DIR                    FEEDBACK_DATA_DIR"/haptic"
+#define FEEDBACK_HAPTIC_TOUCH_DIR      FEEDBACK_HAPTIC_DIR"/touch"
+#define FEEDBACK_HAPTIC_OPER_DIR       FEEDBACK_HAPTIC_DIR"/operation"
+#define FEEDBACK_HAPTIC_NOTI_DIR       FEEDBACK_HAPTIC_DIR"/notification"
+#define FEEDBACK_HAPTIC_DEFAULT_DIR FEEDBACK_HAPTIC_DIR"/default"
 
 const char* snd_file[] = {
        /* TOUCH : SCREEN TOUCH : TAP(TOUCH & RELEASE) : GENERAL */
-       FEEDBACK_SOUND_TOUCH_DIR"touch.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/touch.wav",
        /* TOUCH : SCREEN TOUCH : TAP(TOUCH & RELEASE) : TEXT_NUMERIC_INPUT */
-       FEEDBACK_SOUND_TOUCH_DIR"sip.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"sip_backspace.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"sip.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/sip.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/sip_backspace.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/sip.wav",
        /* TOUCH : SCREEN TOUCH : TAP(TOUCH & RELEASE) : DAILER */
-       FEEDBACK_SOUND_TOUCH_DIR"key0.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key1.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key2.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key3.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key4.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key5.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key6.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key7.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key8.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"key9.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"keyasterisk.wav",
-       FEEDBACK_SOUND_TOUCH_DIR"keysharp.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key0.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key1.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key2.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key3.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key4.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key5.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key6.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key7.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key8.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/key9.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/keyasterisk.wav",
+       FEEDBACK_SOUND_TOUCH_DIR"/keysharp.wav",
        /* TOUCH : H/W OR SOFT TOUCH : HOLD(TAP & HOLD) */
        NULL,
        /* TOUCH : H/W OR SOFT TOUCH : MULTI TAP */
@@ -87,39 +87,38 @@ const char* snd_file[] = {
        NULL,
 
        /* OPERATION : POWER ON/OFF */
-       FEEDBACK_SOUND_OPER_DIR"power_on.wav",
+       FEEDBACK_SOUND_OPER_DIR"/power_on.wav",
        NULL,
        /* OPERATION : CHARGECONN */
-       FEEDBACK_SOUND_OPER_DIR"charger_connection.wav",
+       FEEDBACK_SOUND_OPER_DIR"/charger_connection.wav",
        /* OPERATION : CHARGECONN ALERT ON CALL */
-       FEEDBACK_SOUND_OPER_DIR"charger_connection.wav",
+       FEEDBACK_SOUND_OPER_DIR"/charger_connection.wav",
        /* OPERATION : FULLCHAREGED */
-       FEEDBACK_SOUND_OPER_DIR"fully_charged.wav",
+       FEEDBACK_SOUND_OPER_DIR"/fully_charged.wav",
        /* OPERATION : FULLCHAREGED ALERT ON CALL */
-       FEEDBACK_SOUND_OPER_DIR"fully_charged.wav",
+       FEEDBACK_SOUND_OPER_DIR"/fully_charged.wav",
        /* OPERATION : LOW BATTERY */
-       FEEDBACK_SOUND_OPER_DIR"low_battery.wav",
+       FEEDBACK_SOUND_OPER_DIR"/low_battery.wav",
        /* OPERATION : LOW BATTERY ALERT ON CALL */
-       FEEDBACK_SOUND_OPER_DIR"low_battery.wav",
+       FEEDBACK_SOUND_OPER_DIR"/low_battery.wav",
        /* OPERATION : LOCK/UNLOCK */
-       FEEDBACK_SOUND_OPER_DIR"lock.wav",
-       FEEDBACK_SOUND_OPER_DIR"unlock.wav",
+       FEEDBACK_SOUND_OPER_DIR"/lock.wav",
+       FEEDBACK_SOUND_OPER_DIR"/unlock.wav",
        /* OPERATION : CALL CONNECT/ DISCONNECT */
-       FEEDBACK_SOUND_OPER_DIR"call_connect.wav",
-       FEEDBACK_SOUND_OPER_DIR"call_disconnect.wav",
+       FEEDBACK_SOUND_OPER_DIR"/call_connect.wav",
+       FEEDBACK_SOUND_OPER_DIR"/call_disconnect.wav",
        /* OPERATION : MINUTE MINDER */
-       FEEDBACK_SOUND_OPER_DIR"minute_minder.wav",
+       FEEDBACK_SOUND_OPER_DIR"/minute_minder.wav",
        /* OPERATION : VIBRATION */
        NULL,
        /* OPERATION : CAMERA SHUTTER / SCREEN CAPTURE */
-       FEEDBACK_SOUND_OPER_DIR"shutter.wav",
+       FEEDBACK_SOUND_OPER_DIR"/shutter.wav",
        /* OPERATION : LIST RE-ORDER */
-       FEEDBACK_SOUND_OPER_DIR"list_reorder.wav",
+       FEEDBACK_SOUND_OPER_DIR"/list_reorder.wav",
        /* OPERATION : LIST SLIDER */
-       FEEDBACK_SOUND_OPER_DIR"slider_sweep.wav",
+       FEEDBACK_SOUND_OPER_DIR"/slider_sweep.wav",
        /* OPERATION : VOLUME KEY */
-       FEEDBACK_SOUND_OPER_DIR"volume_control.wav",
-
+       FEEDBACK_SOUND_OPER_DIR"/volume_control.wav",
 };
 
 const char* haptic_file[] = {
@@ -143,64 +142,64 @@ const char* haptic_file[] = {
        NULL,
        NULL,
        /* TOUCH : H/W OR SOFT TOUCH : HOLD(TAP & HOLD) */
-       FEEDBACK_HAPTIC_TOUCH_DIR"touch.tht",
+       FEEDBACK_HAPTIC_TOUCH_DIR"/touch.tht",
        /* TOUCH : H/W OR SOFT TOUCH : MULTI TAP */
-       FEEDBACK_HAPTIC_TOUCH_DIR"touch.tht",
+       FEEDBACK_HAPTIC_TOUCH_DIR"/touch.tht",
        /* TOUCH : H/W OR SOFT TOUCH : TAP */
        NULL,
        /* TOUCH : H/W OR SOFT TOUCH : TAP & HOLD */
        NULL,
 
        /* NOTIFICATION : INCOMING : MESSAGE */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : INCOMING : MESSAGE ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : INCOMING : EMAIL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : INCOMING : EMAIL ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : WAKEUP */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : WAKEUP ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : SCHEDULE */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : SCHEDULE ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : TIMER */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : ALARM : TIMER ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : GENERAL(TICKER/IM/SMS ETC) */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* NOTIFICATION : GENERAL(TICKER/IM/SMS ETC) ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
 
        /* OPERATION : POWER ON/OFF */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : CHARGECONN */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : CHARGECONN ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : FULLCHAREGED */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : FULLCHAREGED ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : LOW BATTERY */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : LOW BATTERY ALERT ON CALL */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : LOCK/UNLOCK */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : CALL CONNECT/ DISCONNECT */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : MINUTE MINDER */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : VIBRATION */
-       FEEDBACK_HAPTIC_DEFAULT_DIR"Basic_call.tht",
+       FEEDBACK_HAPTIC_DEFAULT_DIR"/Basic_call.tht",
        /* OPERATION : CAMERA SHUTTER / SCREEN CAPTURE */
        NULL,
        /* OPERATION : LIST RE-ORDER */
diff --git a/include/feedback-str.h b/include/feedback-str.h
new file mode 100644 (file)
index 0000000..0e41857
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * libfeedback
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __FEEDBACK_STR_H__
+#define __FEEDBACK_STR_H__
+
+static const char *str_type[] =
+{
+       "FEEDBACK_TYPE_NONE",
+       "FEEDBACK_TYPE_SOUND",
+       "FEEDBACK_TYPE_VIBRATION",
+       "FEEDBACK_TYPE_END",
+};
+
+static const char *str_pattern[] =
+{
+       "FEEDBACK_PATTERN_TAP",
+       "FEEDBACK_PATTERN_SIP",
+       "FEEDBACK_PATTERN_SIP_BACKSPACE",
+       "FEEDBACK_PATTERN_MAX_CHARACTER",
+       "FEEDBACK_PATTERN_KEY0",
+       "FEEDBACK_PATTERN_KEY1",
+       "FEEDBACK_PATTERN_KEY2",
+       "FEEDBACK_PATTERN_KEY3",
+       "FEEDBACK_PATTERN_KEY4",
+       "FEEDBACK_PATTERN_KEY5",
+       "FEEDBACK_PATTERN_KEY6",
+       "FEEDBACK_PATTERN_KEY7",
+       "FEEDBACK_PATTERN_KEY8",
+       "FEEDBACK_PATTERN_KEY9",
+       "FEEDBACK_PATTERN_KEY_STAR",
+       "FEEDBACK_PATTERN_KEY_SHARP",
+       "FEEDBACK_PATTERN_HOLD",
+       "FEEDBACK_PATTERN_MULTI_TAP",
+       "FEEDBACK_PATTERN_HW_TAP",
+       "FEEDBACK_PATTERN_HW_HOLD",
+       "FEEDBACK_PATTERN_MESSAGE",
+       "FEEDBACK_PATTERN_MESSAGE_ON_CALL",
+       "FEEDBACK_PATTERN_EMAIL",
+       "FEEDBACK_PATTERN_EMAIL_ON_CALL",
+       "FEEDBACK_PATTERN_WAKEUP",
+       "FEEDBACK_PATTERN_WAKEUP_ON_CALL",
+       "FEEDBACK_PATTERN_SCHEDULE",
+       "FEEDBACK_PATTERN_SCHEDULE_ON_CALL",
+       "FEEDBACK_PATTERN_TIMER",
+       "FEEDBACK_PATTERN_TIMER_ON_CALL",
+       "FEEDBACK_PATTERN_GENERAL",
+       "FEEDBACK_PATTERN_GENERAL_ON_CALL",
+       "FEEDBACK_PATTERN_POWERON",
+       "FEEDBACK_PATTERN_POWEROFF",
+       "FEEDBACK_PATTERN_CHARGERCONN",
+       "FEEDBACK_PATTERN_CHARGERCONN_ON_CALL",
+       "FEEDBACK_PATTERN_FULLCHARGED",
+       "FEEDBACK_PATTERN_FULLCHARGED_ON_CALL",
+       "FEEDBACK_PATTERN_LOWBATT",
+       "FEEDBACK_PATTERN_LOWBATT_ON_CALL",
+       "FEEDBACK_PATTERN_LOCK",
+       "FEEDBACK_PATTERN_UNLOCK",
+       "FEEDBACK_PATTERN_CALLCONNECT",
+       "FEEDBACK_PATTERN_DISCALLCONNECT",
+       "FEEDBACK_PATTERN_MINUTEMINDER",
+       "FEEDBACK_PATTERN_VIBRATION",
+       "FEEDBACK_PATTERN_SHUTTER",
+       "FEEDBACK_PATTERN_LIST_REORDER",
+       "FEEDBACK_PATTERN_SLIDER_SWEEP",
+       "FEEDBACK_PATTERN_VOLUME_KEY",
+};
+
+#endif //__FEEDBACK_STR_H__
index 787cea6..ca224a0 100644 (file)
@@ -150,6 +150,28 @@ int feedback_play_type(feedback_type_e type, feedback_pattern_e pattern);
 int feedback_get_resource_path(feedback_type_e type, feedback_pattern_e pattern, char **path);
 
 /**
+ * @brief Sets the new file path of resource for the given feedback type and pattern.
+ *
+ * @details
+ * Depending on the type of each pattern resouorce has a different format. \n
+ * Currently, System supports two pattern types. \n
+ * #FEEDBACK_TYPE_SOUND type uses .wav format. \n
+ * #FEEDBACK_TYPE_VIBRATION type uses .ivt format. \n
+ * If the given pattern doesn't have a file for the type, @a path will return NULL.
+ *
+ * @param[in]  type      The pattern type
+ * @param[in]  pattern   The pre-defined pattern
+ * @param[in]  path      The new file path of resource for feedback type and pattern
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #FEEDBACK_ERROR_NONE               Successful
+ * @retval #FEEDBACK_ERROR_INVALID_PARAMETER  Invalid parameter
+ * @retval #FEEDBACK_ERROR_OPERATION_FAILED   Operation failed
+ *
+ */
+int feedback_set_resource_path(feedback_type_e type, feedback_pattern_e pattern, char *path);
+
+/**
  * @}
  */
 
diff --git a/include/xmlparser.h b/include/xmlparser.h
new file mode 100644 (file)
index 0000000..cb92b06
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * libfeedback
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __XMLPARSER_H__
+#define __XMLPARSER_H__
+
+#include <libxml/parser.h>
+
+struct xmlData {
+    char *label;
+    unsigned char *data;
+};
+
+enum xmlType {
+       XML_LABEL = 0,
+       XML_DATA,
+};
+
+#define VIBRATION              "vibration"
+
+xmlDocPtr xml_open(const char *xml);
+void xml_close(xmlDocPtr doc);
+
+xmlNodePtr xml_find(xmlDocPtr doc, const xmlChar* expr);
+struct xmlData *xml_parse(xmlDocPtr doc, xmlNodePtr cur);
+int xml_save(xmlDocPtr doc, const char *path);
+void xml_free(struct xmlData* data);
+
+#endif //__XMLPARSER_H__
index cd1fa55..525490f 100644 (file)
@@ -1,12 +1,13 @@
 Name:       libfeedback
 Summary:    Feedback library
-Version:    0.1.2
-Release:    21
+Version:    0.1.3
+Release:    0
 Group:      System/Libraries
 License:    Apache License, Version 2.0
 Source0:    %{name}-%{version}.tar.gz
 Source1:       libsvi.manifest
 source2:       libfeedback.manifest
+source3:       svi-data-sdk.manifest
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
 BuildRequires:  cmake
@@ -14,6 +15,8 @@ BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(mm-keysound)
 BuildRequires:  pkgconfig(haptic)
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(capi-base-common)
 
 %description
@@ -44,6 +47,13 @@ Requires:    libsvi = %{version}-%{release}
 %description -n libsvi-devel
 SVI library (devel)
 
+%package -n svi-data
+Summary:       svi resource package
+Group:         Development/Libraries
+
+%description -n svi-data
+svi resource package
+
 
 %prep
 %setup -q 
@@ -51,6 +61,7 @@ SVI library (devel)
 %build
 cp %{SOURCE1} .
 cp %{SOURCE2} .
+cp %{SOURCE3} .
 cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
 make
 
@@ -58,10 +69,51 @@ make
 rm -rf %{buildroot}
 %make_install
 
+mkdir -p %{buildroot}/opt/share/svi/sound/touch
+mkdir -p %{buildroot}/opt/share/svi/sound/operation
+mkdir -p %{buildroot}/opt/share/svi/haptic/default
+mkdir -p %{buildroot}/opt/share/svi/haptic/touch
+
 %post -p /sbin/ldconfig
 
+%post -n svi-data
+ln -s %{_datadir}/svi/sound/touch/key0.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key1.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key2.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key3.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key4.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key5.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key6.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key7.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key8.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/key9.wav            /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/keyasterisk.wav     /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/keysharp.wav        /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/sip.wav             /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/sip_backspace.wav   /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/touch/touch.wav           /opt/share/svi/sound/touch
+ln -s %{_datadir}/svi/sound/operation/call_connect.wav         /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/call_disconnect.wav      /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/charger_connection.wav   /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/fully_charged.wav        /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/list_reorder.wav         /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/lock.wav                 /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/low_battery.wav          /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/minute_minder.wav        /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/power_on.wav             /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/shutter.wav              /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/slider_sweep.wav         /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/unlock.wav               /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/sound/operation/volume_control.wav       /opt/share/svi/sound/operation
+ln -s %{_datadir}/svi/haptic/default/Basic_call.tht             /opt/share/svi/haptic/default
+ln -s %{_datadir}/svi/haptic/touch/touch.tht                    /opt/share/svi/haptic/touch
+
 %postun -p /sbin/ldconfig
 
+%postun -n svi-data
+rm -rf %{_datadir}/svi/
+rm -rf /opt/share/svi/
+
 %files
 %manifest libfeedback.manifest
 %defattr(-,root,root,-)
@@ -84,11 +136,12 @@ rm -rf %{buildroot}
 %{_libdir}/libsvi.so
 %{_libdir}/pkgconfig/svi.pc
 
-%changelog
-* Mon Dec 10 2012 - Jae-young Hwang <j-zero.hwang@samsung.com>
-- Revise _feedback_play_vibration function for playing tht files.
-- Tag : libfeedback_0.1.2-17
-
-* Wed Nov 21 2012 - Jiyoung Yun <jy910.yun@samsung.com>
-- add FEEDBACK_PATTERN_MAX_CHARACTER enum
-- Tag : libfeedback_0.1.2-16
+%files -n svi-data
+%defattr(644,root,root,-)
+%{_datadir}/svi/*
+%defattr(666,app,app,-)
+%dir /opt/share/svi/sound/touch
+%dir /opt/share/svi/sound/operation
+%dir /opt/share/svi/haptic/default
+%dir /opt/share/svi/haptic/touch
+%manifest svi-data-sdk.manifest
diff --git a/packaging/svi-data-sdk.manifest b/packaging/svi-data-sdk.manifest
new file mode 100644 (file)
index 0000000..138f6e0
--- /dev/null
@@ -0,0 +1,8 @@
+<manifest>
+       <define>
+               <domain name="svi-data"/>
+       </define>
+       <request>
+               <domain name="svi-data"/>
+       </request>
+</manifest>
index 8b73987..99329dd 100644 (file)
 #include "feedback.h"
 #include "feedback-internal.h"
 #include "feedback-file.h"
+#include "feedback-str.h"
 #include "feedback-log.h"
+#include "xmlparser.h"
 
 #define FEEDBACK_RETRY_CNT       1
 #define MAX_FILE_PATH          512
 
-static int soundon = -1;
-static int noti_level = -1;
-static int vib_level = -1;
-static int sndstatus = -1;
-static int vibstatus = -1;
-static int callstatus = -1;
+#define DEFAULT_FEEDBACK_HANDLE                0x0F
+
+#define VIBRATION_XML                          "/usr/share/svi/vibration.xml"
+
+typedef struct {
+       haptic_device_h v_handle;
+       xmlDocPtr v_doc;
+} FEEDBACK_HANDLE;
+
+static int sndstatus;
+static int touch_sndstatus;
+static int soundon;
+static int vibstatus;
+static int vib_level;
+static int noti_level;
+static int callstatus;
+
+static void __feedback_sndstatus_cb(keynode_t *key, void* data)
+{
+       sndstatus = vconf_keynode_get_bool(key);
+       FEEDBACK_LOG("[[[[[[[[[[[[[[sndstatus changed!! new sndstatus => %d", sndstatus);
+       return;
+}
+
+static void __feedback_touch_sndstatus_cb(keynode_t *key, void* data)
+{
+       touch_sndstatus = vconf_keynode_get_bool(key);
+       FEEDBACK_LOG("[[[[[[[[[[[[[[touch_sndstatus changed!! new touch_sndstatus => %d", touch_sndstatus);
+       return;
+}
 
 static void __feedback_soundon_cb(keynode_t *key, void* data)
 {
@@ -52,6 +78,13 @@ static void __feedback_soundon_cb(keynode_t *key, void* data)
        return;
 }
 
+static void __feedback_vibstatus_cb(keynode_t *key, void* data)
+{
+       vibstatus = vconf_keynode_get_bool(key);
+       FEEDBACK_LOG("[[[[[[[[[[[[[[vibstatus changed!! new vibstatus => %d", vibstatus);
+       return;
+}
+
 static void __feedback_vib_cb(keynode_t *key, void* data)
 {
        vib_level = vconf_keynode_get_int(key);
@@ -66,19 +99,6 @@ static void __feedback_noti_cb(keynode_t *key, void* data)
        return;
 }
 
-static void __feedback_sndstatus_cb(keynode_t *key, void* data)
-{
-       sndstatus = vconf_keynode_get_bool(key);
-       FEEDBACK_LOG("[[[[[[[[[[[[[[sndstatus changed!! new sndstatus => %d", sndstatus);
-       return;
-}
-
-static void __feedback_vibstatus_cb(keynode_t *key, void* data)
-{
-       vibstatus = vconf_keynode_get_bool(key);
-       FEEDBACK_LOG("[[[[[[[[[[[[[[vibstatus changed!! new vibstatus => %d", vibstatus);
-       return;
-}
 
 static void __feedback_callstatus_cb(keynode_t *key, void* data)
 {
@@ -136,23 +156,15 @@ static int __feedback_get_haptic_level(feedback_pattern_e pattern)
        else
                level = vib_level;
 
-       FEEDBACK_LOG("Call status : %d, pattern : %d, level : %d", callstatus, pattern, level);
+       FEEDBACK_LOG("Call status : %d, pattern : %s, level : %d", callstatus, str_pattern[pattern], level);
        if (callstatus != VCONFKEY_CALL_OFF) {
-               pattern = __feedback_get_alert_on_call_key(pattern);
-               FEEDBACK_LOG("Call status is connected or connecting. pattern changed : %d", pattern);
-
                // if call status is ON, vibration magnitude is 20%
                level = (int)(level*0.2f);
                level = (level < 1) ? 1 : level;
                FEEDBACK_LOG("level changed : %d", level);
        }
 
-       // START : Temporary code
-       // Casue : Setting vconf of intensity(feedback) is between 0 and 5.
-       //         the vconf will be changed but not yet.
-       level = level*20;
-       // END
-
+       level = level * 20;
        return level;
 }
 
@@ -168,6 +180,35 @@ static bool __feedback_get_always_alert_case(feedback_pattern_e pattern)
        return false;
 }
 
+static int __feedback_get_data(xmlDocPtr doc, feedback_pattern_e pattern, struct xmlData **data)
+{
+       xmlNodePtr cur;
+       struct xmlData *retData;
+
+       cur = xml_find(doc, (const xmlChar*)str_pattern[pattern]);
+       if (cur == NULL) {
+               FEEDBACK_ERROR("xml_find fail");
+               return -1;
+       }
+
+       retData = xml_parse(doc, cur);
+       if (retData == NULL) {
+               FEEDBACK_ERROR("xml_parse fail");
+               return -1;
+       }
+
+       *data = retData;
+       return 0;
+}
+
+static void __feedback_release_data(struct xmlData *data)
+{
+       if (data == NULL)
+               return;
+
+       xml_free(data);
+}
+
 static int __feedback_change_symlink(const char *sym_path, const char *new_path)
 {
        struct stat buf;
@@ -208,12 +249,12 @@ static int __feedback_restore_default_file(feedback_type_e type, feedback_patter
        int ret = -1;
 
        if (type <= FEEDBACK_TYPE_NONE || type >= FEEDBACK_TYPE_END) {
-               FEEDBACK_ERROR("Invalid parameter : type(%d)", type);
+               FEEDBACK_ERROR("Invalid parameter : type(%s)", str_type[type]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
        if (pattern <= FEEDBACK_PATTERN_NONE || pattern >= FEEDBACK_PATTERN_END) {
-               FEEDBACK_ERROR("Invalid parameter : pattern(%d)", pattern);
+               FEEDBACK_ERROR("Invalid parameter : pattern(%s)", str_pattern[pattern]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
@@ -244,17 +285,24 @@ static int __feedback_restore_default_file(feedback_type_e type, feedback_patter
 
 int _feedback_init(feedback_h *handle)
 {
-       haptic_device_h v_handle = NULL;
-       int ret = -1;
+       FEEDBACK_HANDLE *phandle;
+       haptic_device_h v_handle;
+       xmlDocPtr v_doc;
+       int ret;
 
        /* Sound Init */
-       if (vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) < 0) {
-               FEEDBACK_ERROR("vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) ==> FAIL!!");
+       if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sndstatus) < 0) {
+               FEEDBACK_ERROR("vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sndstatus) ==> FAIL!!");
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
-       if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sndstatus) < 0) {
-               FEEDBACK_ERROR("vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sndstatus) ==> FAIL!!");
+       if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &touch_sndstatus) < 0) {
+               FEEDBACK_ERROR("vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &touch_sndstatus) ==> FAIL!!");
+               return FEEDBACK_ERROR_OPERATION_FAILED;
+       }
+
+       if (vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) < 0) {
+               FEEDBACK_ERROR("vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) ==> FAIL!!");
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
@@ -282,49 +330,71 @@ int _feedback_init(feedback_h *handle)
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
+       /* xml Init */
+       v_doc = xml_open(VIBRATION_XML);
+       if (v_doc == NULL) {
+               FEEDBACK_ERROR("xml_open(%s) fail", VIBRATION_XML);
+               return FEEDBACK_ERROR_OPERATION_FAILED;
+       }
+
        /* Vibration Init */
        ret = haptic_open(HAPTIC_DEVICE_ALL, &v_handle);
        if (ret != HAPTIC_ERROR_NONE) {
                FEEDBACK_ERROR("haptic_open(HAPTIC_DEVICE_ALL, &v_handle) ==> FAIL!! : %d", ret);
-               return FEEDBACK_ERROR_OPERATION_FAILED;
+               v_handle = (haptic_device_h)DEFAULT_FEEDBACK_HANDLE;
        }
 
        /* add watch for status value */
-       vconf_notify_key_changed(VCONFKEY_SOUND_STATUS, __feedback_soundon_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, __feedback_sndstatus_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, __feedback_touch_sndstatus_cb, NULL);
+       vconf_notify_key_changed(VCONFKEY_SOUND_STATUS, __feedback_soundon_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, __feedback_vibstatus_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, __feedback_vib_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, __feedback_noti_cb, NULL);
        vconf_notify_key_changed(VCONFKEY_CALL_STATE, __feedback_callstatus_cb, NULL);
 
-       FEEDBACK_LOG("vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) ==> %d", soundon);
        FEEDBACK_LOG("vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sndstatus) ==> %d", sndstatus);
+       FEEDBACK_LOG("vconf_get_bool(VCONFKEY_SETAPPL_....UNDS_BOOL, &touch_sndstatus) ==> %d", touch_sndstatus);
+       FEEDBACK_LOG("vconf_get_int(VCONFKEY_SOUND_STATUS, &soundon) ==> %d", soundon);
        FEEDBACK_LOG("vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibstatus) ==> %d", vibstatus);
        FEEDBACK_LOG("vconf_get_int(VCONFKEY_FEEDBACK_VIBRATION_LEVEL_INT, &vib_level) ==> %d", vib_level);
        FEEDBACK_LOG("vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &noti_level) ==> %d", noti_level);
        FEEDBACK_LOG("vconf_get_int(VCONFKEY_CALL_STATUS, &callstatus) ==> %d", callstatus);
 
-       *handle = (feedback_h)v_handle;
+       phandle = (FEEDBACK_HANDLE *)malloc(sizeof(FEEDBACK_HANDLE));
+       phandle->v_handle = v_handle;
+       phandle->v_doc = v_doc;
+       *handle = (feedback_h)phandle;
+       FEEDBACK_LOG("handle value : %x", handle);
        return FEEDBACK_ERROR_NONE;
 }
 
 int _feedback_fini(feedback_h handle)
 {
+       FEEDBACK_HANDLE *phandle = (FEEDBACK_HANDLE *)handle;
        int ret = -1;
 
-       if (handle <= 0) {
-               FEEDBACK_ERROR("Invalid parameter : handle(%d)", handle);
+       if (!handle) {
+               FEEDBACK_ERROR("Invalid parameter : handle(NULL)");
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
-       ret = haptic_close((haptic_device_h)handle);
-       if (ret != HAPTIC_ERROR_NONE) {
-               FEEDBACK_ERROR("haptic_close is failed : %d", ret);
-               return FEEDBACK_ERROR_OPERATION_FAILED;
+       if (phandle->v_handle != DEFAULT_FEEDBACK_HANDLE) {
+               ret = haptic_close(phandle->v_handle);
+               if (ret != HAPTIC_ERROR_NONE) {
+                       FEEDBACK_ERROR("haptic_close is failed : %d", ret);
+               }
        }
 
-       vconf_ignore_key_changed(VCONFKEY_SOUND_STATUS, __feedback_soundon_cb);
+       if (phandle->v_doc) {
+               xml_close(phandle->v_doc);
+       }
+
+       free(phandle);
+
        vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, __feedback_sndstatus_cb);
+       vconf_ignore_key_changed(VCONFKEY_SOUND_STATUS, __feedback_soundon_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, __feedback_touch_sndstatus_cb);
        vconf_ignore_key_changed(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, __feedback_vibstatus_cb);
        vconf_ignore_key_changed(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, __feedback_vib_cb);
        vconf_ignore_key_changed(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, __feedback_noti_cb);
@@ -339,8 +409,8 @@ int _feedback_play_sound(feedback_h handle, feedback_pattern_e pattern)
        int retry = FEEDBACK_RETRY_CNT;
        struct stat buf;
 
-       if (handle <= 0) {
-               FEEDBACK_ERROR("Please call _feedback_init() for sound init ");
+       if (!handle) {
+               FEEDBACK_ERROR("Invalid parameter : handle(NULL)");
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
@@ -354,13 +424,18 @@ int _feedback_play_sound(feedback_h handle, feedback_pattern_e pattern)
                return FEEDBACK_ERROR_NONE;
        }
 
-       if (pattern == FEEDBACK_PATTERN_NONE) {
-               FEEDBACK_LOG("call _feedback_play_sound passing FEEDBACK_PATTERN_NONE");
+       if (touch_sndstatus == 0 && pattern >= FEEDBACK_PATTERN_TAP && pattern <= FEEDBACK_PATTERN_HW_HOLD) {
+               FEEDBACK_LOG("Touch Sound condition is OFF and pattern is touch type (touch_sndstatus : %d, pattern : %s)", touch_sndstatus, str_pattern[pattern]);
                return FEEDBACK_ERROR_NONE;
        }
 
+       if (callstatus != VCONFKEY_CALL_OFF) {
+               pattern = __feedback_get_alert_on_call_key(pattern);
+               FEEDBACK_LOG("Call status is connected or connecting. pattern changed : %s", str_pattern[pattern]);
+       }
+
        if (snd_file[pattern] == NULL) {
-               FEEDBACK_LOG("This case(%d) does not play sound", pattern);
+               FEEDBACK_LOG("This case(%s) does not play sound", str_pattern[pattern]);
                return FEEDBACK_ERROR_NONE;
        }
 
@@ -368,18 +443,12 @@ int _feedback_play_sound(feedback_h handle, feedback_pattern_e pattern)
                FEEDBACK_ERROR("%s is not presents", snd_file[pattern]);
                ret = __feedback_restore_default_file(FEEDBACK_TYPE_SOUND, pattern);
                if (FEEDBACK_FAILED(ret)) {
-                       FEEDBACK_ERROR("__feedback_restore_default_file(%d/%d) error", FEEDBACK_TYPE_SOUND, pattern);
+                       FEEDBACK_ERROR("__feedback_restore_default_file(%s) error", str_pattern[pattern]);
                        return FEEDBACK_ERROR_OPERATION_FAILED;
                }
                FEEDBACK_LOG("%s is restored", snd_file[pattern]);
        }
 
-       FEEDBACK_LOG("Call status : %d, pattern : %d", callstatus, pattern);
-       if (callstatus != VCONFKEY_CALL_OFF) {
-               pattern = __feedback_get_alert_on_call_key(pattern);
-               FEEDBACK_LOG("Call status is connected or connecting. pattern changed : %d", pattern);
-       }
-
        do {
                ret = mm_sound_play_keysound(snd_file[pattern], __feedback_get_volume_type(pattern));
                if (ret == MM_ERROR_NONE) {
@@ -394,45 +463,53 @@ int _feedback_play_sound(feedback_h handle, feedback_pattern_e pattern)
 
 int _feedback_play_vibration(feedback_h handle, feedback_pattern_e pattern)
 {
-       int ret = -1;
+       FEEDBACK_HANDLE *phandle = (FEEDBACK_HANDLE *)handle;
+       int ret;
        struct stat buf;
+       struct xmlData *data;
 
-       if (handle <= 0) {
-               FEEDBACK_ERROR("Please call _feedback_init() for sound init ");
+       if (!handle) {
+               FEEDBACK_ERROR("Invalid parameter : handle(NULL)");
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
+       if (handle == DEFAULT_FEEDBACK_HANDLE) {
+               FEEDBACK_ERROR("haptic is not initialized");
+               return FEEDBACK_ERROR_OPERATION_FAILED;
+       }
+
        if (vibstatus == 0 && !__feedback_get_always_alert_case(pattern))  {
                FEEDBACK_LOG("Vibration condition is OFF (vibstatus : %d)", vibstatus);
                return FEEDBACK_ERROR_NONE;
        }
 
-       if (pattern == FEEDBACK_PATTERN_NONE) {
-               FEEDBACK_LOG("call _feedback_play_vibration passing FEEDBACK_PATTERN_NONE");
-               return FEEDBACK_ERROR_NONE;
+       if (callstatus != VCONFKEY_CALL_OFF) {
+               pattern = __feedback_get_alert_on_call_key(pattern);
+               FEEDBACK_LOG("Call status is connected or connecting. pattern changed : %s", str_pattern[pattern]);
        }
 
-       if (haptic_file[pattern] == NULL) {
-               FEEDBACK_LOG("This case(%d) does not play vibration", pattern);
-               return FEEDBACK_ERROR_NONE;
+       ret = __feedback_get_data(phandle->v_doc, pattern, &data);
+       if (ret < 0) {
+               FEEDBACK_ERROR("__feedback_get_vibration_data fail");
+               return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
-       if (stat(haptic_file[pattern], &buf)) {
-               FEEDBACK_ERROR("%s is not presents", haptic_file[pattern]);
-               ret = __feedback_restore_default_file(FEEDBACK_TYPE_VIBRATION, pattern);
-               if (FEEDBACK_FAILED(ret)) {
-                       FEEDBACK_ERROR("__feedback_restore_default_file(%d/%d) error", FEEDBACK_TYPE_VIBRATION, pattern);
-                       return FEEDBACK_ERROR_OPERATION_FAILED;
-               }
-               FEEDBACK_LOG("%s is restored", haptic_file[pattern]);
+       if (data->data == NULL) {
+               FEEDBACK_LOG("This case(%s) does not play vibration", str_pattern[pattern]);
+               __feedback_release_data(data);
+               return FEEDBACK_ERROR_NONE;
        }
 
-       ret = haptic_vibrate_file_with_detail((haptic_device_h)handle, haptic_file[pattern], HAPTIC_ITERATION_ONCE, __feedback_get_haptic_level(pattern), __feedback_get_priority(pattern), NULL);
+       /* play haptic buffer */
+       ret = haptic_vibrate_buffer_with_detail(phandle->v_handle, data->data, HAPTIC_ITERATION_ONCE,
+                                       __feedback_get_haptic_level(pattern), __feedback_get_priority(pattern), NULL);
        if (ret != HAPTIC_ERROR_NONE) {
-               FEEDBACK_ERROR("haptic_vibrate_file_with_detail(%s) is failed", haptic_file[pattern]);
+               FEEDBACK_ERROR("haptic_vibrate_buffer_with_detail is failed");
+               __feedback_release_data(data);
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
+       __feedback_release_data(data);
        return FEEDBACK_ERROR_NONE;
 }
 
@@ -442,12 +519,12 @@ int _feedback_set_path(feedback_type_e type, feedback_pattern_e pattern, char* p
        int ret = -1;
 
        if (type <= FEEDBACK_TYPE_NONE || type >= FEEDBACK_TYPE_END) {
-               FEEDBACK_ERROR("Invalid parameter : type(%d)", type);
+               FEEDBACK_ERROR("Invalid parameter : type(%s)", str_type[type]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
        if (pattern <= FEEDBACK_PATTERN_NONE || pattern >= FEEDBACK_PATTERN_END) {
-               FEEDBACK_ERROR("Invalid parameter : pattern(%d)", pattern);
+               FEEDBACK_ERROR("Invalid parameter : pattern(%s)", str_pattern[pattern]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
@@ -468,7 +545,7 @@ int _feedback_set_path(feedback_type_e type, feedback_pattern_e pattern, char* p
        }
 
        if (cur_path == NULL) {
-               FEEDBACK_ERROR("This pattern(%d) in this type(%d) is not supported to play", pattern, type);
+               FEEDBACK_ERROR("This pattern(%s) in this type(%s) is not supported to play", str_pattern[pattern], str_type[type]);
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
@@ -487,12 +564,12 @@ int _feedback_get_path(feedback_type_e type, feedback_pattern_e pattern, char* b
        int retry = FEEDBACK_RETRY_CNT;
 
        if (type <= FEEDBACK_TYPE_NONE || type >= FEEDBACK_TYPE_END) {
-               FEEDBACK_ERROR("Invalid parameter : type(%d)", type);
+               FEEDBACK_ERROR("Invalid parameter : type(%s)", str_type[type]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
        if (pattern <= FEEDBACK_PATTERN_NONE || pattern >= FEEDBACK_PATTERN_END) {
-               FEEDBACK_ERROR("Invalid parameter : pattern(%d)", pattern);
+               FEEDBACK_ERROR("Invalid parameter : pattern(%s)", str_pattern[pattern]);
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
@@ -508,7 +585,7 @@ int _feedback_get_path(feedback_type_e type, feedback_pattern_e pattern, char* b
        }
 
        if (cur_path == NULL) {
-               FEEDBACK_ERROR("This pattern(%d) in this type(%d) is not supported to play", pattern, type);
+               FEEDBACK_ERROR("This pattern(%s) in this type(%s) is not supported to play", str_pattern[pattern], str_type[type]);
                snprintf(buf, buflen, "NULL");
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
index 368fbb5..bfd6b7a 100644 (file)
@@ -82,6 +82,11 @@ API int feedback_play(feedback_pattern_e pattern)
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
+       if (pattern == FEEDBACK_PATTERN_NONE) {
+               FEEDBACK_LOG("pattern is NONE");
+               return FEEDBACK_ERROR_NONE;
+       }
+
        err = _feedback_play_sound(_feedback_handle, pattern);
        if (FEEDBACK_FAILED(err)) {
                FEEDBACK_ERROR("_feedback_play_sound is failed");
@@ -116,6 +121,11 @@ API int feedback_play_type(feedback_type_e type, feedback_pattern_e pattern)
                return FEEDBACK_ERROR_INVALID_PARAMETER;
        }
 
+       if (pattern == FEEDBACK_PATTERN_NONE) {
+               FEEDBACK_LOG("pattern is NONE");
+               return FEEDBACK_ERROR_NONE;
+       }
+
        switch(type) {
                case FEEDBACK_TYPE_SOUND:
                        err = _feedback_play_sound(_feedback_handle, pattern);
@@ -166,3 +176,31 @@ API int feedback_get_resource_path(feedback_type_e type, feedback_pattern_e patt
 
        return FEEDBACK_ERROR_NONE;
 }
+
+API int feedback_set_resource_path(feedback_type_e type, feedback_pattern_e pattern, char* path)
+{
+       int err = -1;
+
+       if (path == NULL) {
+               FEEDBACK_ERROR("Invalid parameter : path(NULL)");
+               return FEEDBACK_ERROR_INVALID_PARAMETER;
+       }
+
+       if (type <= FEEDBACK_TYPE_NONE || type >= FEEDBACK_TYPE_END) {
+               FEEDBACK_ERROR("Invalid parameter : type(%d)", type);
+               return FEEDBACK_ERROR_INVALID_PARAMETER;
+       }
+
+       if (pattern <= FEEDBACK_PATTERN_NONE || pattern >= FEEDBACK_PATTERN_END) {
+               FEEDBACK_ERROR("Invalid parameter : pattern(%d)", pattern);
+               return FEEDBACK_ERROR_INVALID_PARAMETER;
+       }
+
+       err = _feedback_set_path(type, pattern, path);
+       if (FEEDBACK_FAILED(err)) {
+               FEEDBACK_ERROR("_feedback_set_path is failed");
+               return FEEDBACK_ERROR_OPERATION_FAILED;
+       }
+
+       return FEEDBACK_ERROR_NONE;
+}
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/src/xmlparser.c b/src/xmlparser.c
new file mode 100644 (file)
index 0000000..d7d1837
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * libfeedback
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <assert.h>
+#include <glib.h>
+
+#include "xmlparser.h"
+#include "feedback-log.h"
+
+static const xmlChar* data_str[] = {
+       [XML_LABEL] = "label",
+       [XML_DATA]  = "data",
+};
+
+xmlDocPtr xml_open(const char *xml)
+{
+       xmlDocPtr doc;
+
+       doc = xmlReadFile(xml, NULL, 0);
+       if (doc == NULL) {
+               FEEDBACK_ERROR("xmlReadFile fail");
+               return NULL;
+       }
+
+       return doc;
+}
+
+void xml_close(xmlDocPtr doc)
+{
+       xmlFreeDoc(doc);
+}
+
+static int xml_compare(xmlDocPtr doc, xmlNodePtr cur, const xmlChar* expr)
+{
+       xmlNodePtr node;
+       xmlChar *key;
+       int r;
+
+       assert(doc);
+       assert(cur);
+       assert(expr);
+
+       for (node = cur->children; node != NULL; node = node->next) {
+               if (xmlStrcmp(node->name, data_str[XML_LABEL]))
+                       continue;
+
+               key = xmlNodeListGetString(doc, node->children, 1);
+               r = xmlStrcmp(key, expr);
+               xmlFree(key);
+
+               if (r == 0)
+                       return 1;
+
+               break;
+       }
+
+       return 0;
+}
+
+xmlNodePtr xml_find(xmlDocPtr doc, const xmlChar* expr)
+{
+       xmlNodePtr root;
+       xmlNodePtr cur;
+
+       assert(doc);
+       assert(expr);
+
+       root = xmlDocGetRootElement(doc);
+       if (root == NULL) {
+               FEEDBACK_ERROR("xmlDocGetRootElement fail");
+               return NULL;
+       }
+
+       for (cur = root->children; cur != NULL; cur = cur->next) {
+               if (xmlStrcmp(cur->name, (const xmlChar*)VIBRATION))
+                       continue;
+
+               if (!xml_compare(doc, cur, expr))
+                       continue;
+
+               return cur;
+       }
+
+       return NULL;
+}
+
+struct xmlData *xml_parse(xmlDocPtr doc, xmlNodePtr cur)
+{
+       xmlNodePtr node;
+       struct xmlData *data;
+       char *b64_data;
+       int len;
+
+       assert(doc);
+       assert(cur);
+
+       data = (struct xmlData*)malloc(sizeof(struct xmlData));
+       if (data == NULL) {
+               FEEDBACK_ERROR("out of memory");
+               return NULL;
+       }
+
+       memset(data, 0, sizeof(struct xmlData));
+       for (node = cur->children; node != NULL; node = node->next) {
+               if (!xmlStrcmp(node->name, data_str[XML_LABEL])) {
+                       data->label = (char*)xmlNodeListGetString(doc, node->children, 1);
+                       FEEDBACK_LOG("label : %s", data->label);
+               } else if (!xmlStrcmp(node->name, data_str[XML_DATA])) {
+                       b64_data = (char *)xmlNodeListGetString(doc, node->children, 1);
+                       if (b64_data != NULL) {
+                               FEEDBACK_LOG("b64_data : %s", b64_data);
+                               data->data = g_base64_decode(b64_data, &len);
+                               xmlFree(b64_data);
+                       }
+               }
+       }
+
+       return data;
+}
+
+int xml_save(xmlDocPtr doc, const char *path)
+{
+       int r;
+
+       assert(doc);
+       assert(path);
+
+       r = xmlSaveFile(path, doc);
+       if (r < 0) {
+               FEEDBACK_ERROR("xmlSaveFile fail");
+               return -1;
+       }
+
+       return 0;
+}
+
+void xml_free(struct xmlData* data)
+{
+       assert(data);
+
+       free(data->label);
+       free(data->data);
+       free(data);
+}
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/svidata/svi/haptic/default/Basic_call.tht b/svidata/svi/haptic/default/Basic_call.tht
new file mode 100755 (executable)
index 0000000..3167416
Binary files /dev/null and b/svidata/svi/haptic/default/Basic_call.tht differ
diff --git a/svidata/svi/haptic/touch/touch.tht b/svidata/svi/haptic/touch/touch.tht
new file mode 100755 (executable)
index 0000000..e374bea
Binary files /dev/null and b/svidata/svi/haptic/touch/touch.tht differ
diff --git a/svidata/svi/sound/operation/call_connect.wav b/svidata/svi/sound/operation/call_connect.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/call_connect.wav differ
diff --git a/svidata/svi/sound/operation/call_disconnect.wav b/svidata/svi/sound/operation/call_disconnect.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/call_disconnect.wav differ
diff --git a/svidata/svi/sound/operation/charger_connection.wav b/svidata/svi/sound/operation/charger_connection.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/charger_connection.wav differ
diff --git a/svidata/svi/sound/operation/fully_charged.wav b/svidata/svi/sound/operation/fully_charged.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/fully_charged.wav differ
diff --git a/svidata/svi/sound/operation/list_reorder.wav b/svidata/svi/sound/operation/list_reorder.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/list_reorder.wav differ
diff --git a/svidata/svi/sound/operation/lock.wav b/svidata/svi/sound/operation/lock.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/lock.wav differ
diff --git a/svidata/svi/sound/operation/low_battery.wav b/svidata/svi/sound/operation/low_battery.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/low_battery.wav differ
diff --git a/svidata/svi/sound/operation/minute_minder.wav b/svidata/svi/sound/operation/minute_minder.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/minute_minder.wav differ
diff --git a/svidata/svi/sound/operation/power_on.wav b/svidata/svi/sound/operation/power_on.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/power_on.wav differ
diff --git a/svidata/svi/sound/operation/shutter.wav b/svidata/svi/sound/operation/shutter.wav
new file mode 100755 (executable)
index 0000000..9dea92b
Binary files /dev/null and b/svidata/svi/sound/operation/shutter.wav differ
diff --git a/svidata/svi/sound/operation/slider_sweep.wav b/svidata/svi/sound/operation/slider_sweep.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/slider_sweep.wav differ
diff --git a/svidata/svi/sound/operation/unlock.wav b/svidata/svi/sound/operation/unlock.wav
new file mode 100755 (executable)
index 0000000..5383bdf
Binary files /dev/null and b/svidata/svi/sound/operation/unlock.wav differ
diff --git a/svidata/svi/sound/operation/volume_control.wav b/svidata/svi/sound/operation/volume_control.wav
new file mode 100755 (executable)
index 0000000..1ec9de4
Binary files /dev/null and b/svidata/svi/sound/operation/volume_control.wav differ
diff --git a/svidata/svi/sound/touch/key0.wav b/svidata/svi/sound/touch/key0.wav
new file mode 100755 (executable)
index 0000000..e2cd877
Binary files /dev/null and b/svidata/svi/sound/touch/key0.wav differ
diff --git a/svidata/svi/sound/touch/key1.wav b/svidata/svi/sound/touch/key1.wav
new file mode 100755 (executable)
index 0000000..fa77cf4
Binary files /dev/null and b/svidata/svi/sound/touch/key1.wav differ
diff --git a/svidata/svi/sound/touch/key2.wav b/svidata/svi/sound/touch/key2.wav
new file mode 100755 (executable)
index 0000000..53da84c
Binary files /dev/null and b/svidata/svi/sound/touch/key2.wav differ
diff --git a/svidata/svi/sound/touch/key3.wav b/svidata/svi/sound/touch/key3.wav
new file mode 100755 (executable)
index 0000000..ede9a2b
Binary files /dev/null and b/svidata/svi/sound/touch/key3.wav differ
diff --git a/svidata/svi/sound/touch/key4.wav b/svidata/svi/sound/touch/key4.wav
new file mode 100755 (executable)
index 0000000..105bddc
Binary files /dev/null and b/svidata/svi/sound/touch/key4.wav differ
diff --git a/svidata/svi/sound/touch/key5.wav b/svidata/svi/sound/touch/key5.wav
new file mode 100755 (executable)
index 0000000..a34b4d0
Binary files /dev/null and b/svidata/svi/sound/touch/key5.wav differ
diff --git a/svidata/svi/sound/touch/key6.wav b/svidata/svi/sound/touch/key6.wav
new file mode 100755 (executable)
index 0000000..34a8bec
Binary files /dev/null and b/svidata/svi/sound/touch/key6.wav differ
diff --git a/svidata/svi/sound/touch/key7.wav b/svidata/svi/sound/touch/key7.wav
new file mode 100755 (executable)
index 0000000..3b845a4
Binary files /dev/null and b/svidata/svi/sound/touch/key7.wav differ
diff --git a/svidata/svi/sound/touch/key8.wav b/svidata/svi/sound/touch/key8.wav
new file mode 100755 (executable)
index 0000000..2a05528
Binary files /dev/null and b/svidata/svi/sound/touch/key8.wav differ
diff --git a/svidata/svi/sound/touch/key9.wav b/svidata/svi/sound/touch/key9.wav
new file mode 100755 (executable)
index 0000000..80699c8
Binary files /dev/null and b/svidata/svi/sound/touch/key9.wav differ
diff --git a/svidata/svi/sound/touch/keyasterisk.wav b/svidata/svi/sound/touch/keyasterisk.wav
new file mode 100755 (executable)
index 0000000..9ec2e71
Binary files /dev/null and b/svidata/svi/sound/touch/keyasterisk.wav differ
diff --git a/svidata/svi/sound/touch/keysharp.wav b/svidata/svi/sound/touch/keysharp.wav
new file mode 100755 (executable)
index 0000000..ce7cd88
Binary files /dev/null and b/svidata/svi/sound/touch/keysharp.wav differ
diff --git a/svidata/svi/sound/touch/sip.wav b/svidata/svi/sound/touch/sip.wav
new file mode 100755 (executable)
index 0000000..5b44d12
Binary files /dev/null and b/svidata/svi/sound/touch/sip.wav differ
diff --git a/svidata/svi/sound/touch/sip_backspace.wav b/svidata/svi/sound/touch/sip_backspace.wav
new file mode 100755 (executable)
index 0000000..5b44d12
Binary files /dev/null and b/svidata/svi/sound/touch/sip_backspace.wav differ
diff --git a/svidata/svi/sound/touch/touch.wav b/svidata/svi/sound/touch/touch.wav
new file mode 100755 (executable)
index 0000000..1ec9de4
Binary files /dev/null and b/svidata/svi/sound/touch/touch.wav differ
diff --git a/svidata/svi/vibration.xml b/svidata/svi/vibration.xml
new file mode 100644 (file)
index 0000000..9db7adc
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>
+<config>
+       <label>svi-data</label>
+       <description>Vibration Resource</description>
+       <vibration>
+               <label>FEEDBACK_PATTERN_TAP</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SIP</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SIP_BACKSPACE</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_MAX_CHARACTER</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY0</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY1</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY2</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY3</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY4</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY5</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY6</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY7</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY8</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY9</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY_STAR</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_KEY_SHARP</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_HOLD</label>
+               <data>VEhGTSwAAABmbXQgFAAAAAEAAQBjAAAAZAAAAGRhdGEQ</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_MULTI_TAP</label>
+               <data>VEhGTSwAAABmbXQgFAAAAAEAAQBjAAAAZAAAAGRhdGEQ</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_HW_TAP</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_HW_HOLD</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_MESSAGE</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_MESSAGE_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_EMAIL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_EMAIL_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_WAKEUP</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_WAKEUP_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SCHEDULE</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SCHEDULE_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_TIMER</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_TIMER_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_GENERAL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_GENERAL_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_POWERON</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_POWEROFF</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_CHARGERCONN</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_CHARGERCONN_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_FULLCHARGED</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_FULLCHARGED_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_LOWBATT</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_LOWBATT_ON_CALL</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_LOCK</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_UNLOCK</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_CALLCONNECT</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_DISCALLCONNECT</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_MINUTEMINDER</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_VIBRATION</label>
+               <data>VEhGTWoAAABmbXQgFAAAAAEAAQBjAAAArA0AAGRhdGFOAAAA////////////////////////////////////////AAAAAAAAAAAAAAAAAA</data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SHUTTER</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_LIST_REORDER</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_SLIDER_SWEEP</label>
+               <data></data>
+       </vibration>
+       <vibration>
+               <label>FEEDBACK_PATTERN_VOLUME_KEY</label>
+               <data></data>
+       </vibration>
+</config>