Support feedback internal enums for each profile 03/141103/4
authorpr.jung <pr.jung@samsung.com>
Fri, 28 Jul 2017 07:00:46 +0000 (16:00 +0900)
committerJung <pr.jung@samsung.com>
Fri, 28 Jul 2017 08:37:11 +0000 (08:37 +0000)
- Public and internal pattern enums are not continuous
- libfeedback need to convert pattern id to pattern string and vice versa

Change-Id: I70398d3b488e9420e23a59114d47d91480d5deeb
Signed-off-by: pr.jung <pr.jung@samsung.com>
include/feedback-ids-internal.h
src/check.c
src/common.h
src/feedback.c
src/parser.c
src/parser.h
src/profiles.h
src/sound.c

index c694406..2940c44 100755 (executable)
@@ -70,18 +70,14 @@ typedef enum {
        FEEDBACK_PATTERN_NOTIFICATION           = 146,   /**< Feedback pattern for notification */
 
        FEEDBACK_PATTERN_RESERVED_END           = 10000,
-       // Add new pattern ids for mobile devices here
+       // Add new pattern ids for mobile and wearable devices here
        // ...
        FEEDBACK_PATTERN_MOBILE_END             = 20000,
-       // Add new pattern ids for wearable devices here
-       // ...
-       FEEDBACK_PATTERN_WEARABLE_END           = 30000,
        // Add new pattern ids for tv devices here
        // ...
-       FEEDBACK_PATTERN_TV_END                 = 40000,
+       FEEDBACK_PATTERN_TV_END                 = 30000,
        // Add new pattern ids for ivi devices here
        // ...
-       FEEDBACK_PATTERN_IVI_END                = 50000,
        FEEDBACK_PATTERN_INTERNAL_END           = 90000,
 } feedback_pattern_internal_e;
 
index 8e18e01..1646234 100644 (file)
@@ -40,258 +40,197 @@ static const char *profile_str_type[] = {
        "FEEDBACK_TYPE_VIBRATION",
 };
 
-static const char *mobile_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "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_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "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_CHARGING_ERROR",
-       "FEEDBACK_PATTERN_CHARGING_ERROR_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_OUTGOING_CALL",
-       "",
-       "FEEDBACK_PATTERN_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-       "",
-       "",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
-       "FEEDBACK_PATTERN_RINGER",
-       "FEEDBACK_PATTERN_NOTIFICATION",
-       "FEEDBACK_PATTERN_INFO",
-       "FEEDBACK_PATTERN_WARNING",
-       "FEEDBACK_PATTERN_ERROR",
-       "FEEDBACK_PATTERN_EMERGENCY",
+static const struct pattern_field mobile_str_pattern[] = {
+       {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
+       {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
+
+       {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
+       {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
+       {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
+       {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
+       {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
+       {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
+       {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
+       {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
+       {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
+       {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
+       {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
+       {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
+       {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
+       {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
+
+       {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
+       {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
+
+       {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
+       {"FEEDBACK_PATTERN_MESSAGE_ON_CALL", FEEDBACK_PATTERN_MESSAGE_ON_CALL},
+       {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
+       {"FEEDBACK_PATTERN_EMAIL_ON_CALL", FEEDBACK_PATTERN_EMAIL_ON_CALL},
+       {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
+       {"FEEDBACK_PATTERN_WAKEUP_ON_CALL", FEEDBACK_PATTERN_WAKEUP_ON_CALL},
+       {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
+       {"FEEDBACK_PATTERN_SCHEDULE_ON_CALL", FEEDBACK_PATTERN_SCHEDULE_ON_CALL},
+       {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
+       {"FEEDBACK_PATTERN_TIMER_ON_CALL", FEEDBACK_PATTERN_TIMER_ON_CALL},
+       {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
+       {"FEEDBACK_PATTERN_GENERAL_ON_CALL", FEEDBACK_PATTERN_GENERAL_ON_CALL},
+
+       {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
+       {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
+       {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
+       {"FEEDBACK_PATTERN_CHARGERCONN_ON_CALL", FEEDBACK_PATTERN_CHARGERCONN_ON_CALL},
+       {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
+       {"FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL", FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL},
+       {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
+       {"FEEDBACK_PATTERN_FULLCHARGED_ON_CALL", FEEDBACK_PATTERN_FULLCHARGED_ON_CALL},
+       {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
+       {"FEEDBACK_PATTERN_LOWBATT_ON_CALL", FEEDBACK_PATTERN_LOWBATT_ON_CALL},
+       {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
+       {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
+
+       {"FEEDBACK_PATTERN_OUTGOING_CALL", FEEDBACK_PATTERN_OUTGOING_CALL},
+
+       {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
+       {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
+       {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
+       {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
+
+       {"FEEDBACK_PATTERN_SCREEN_CAPTURE", FEEDBACK_PATTERN_SCREEN_CAPTURE},
+       {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
+       {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
+       {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
+
+       {"FEEDBACK_PATTERN_SEND_SOS_MESSAGE", FEEDBACK_PATTERN_SEND_SOS_MESSAGE},
+       {"FEEDBACK_PATTERN_SYSTEM_SHORT", FEEDBACK_PATTERN_SYSTEM_SHORT},
+       {"FEEDBACK_PATTERN_SYSTEM_ERROR", FEEDBACK_PATTERN_SYSTEM_ERROR},
+       {"FEEDBACK_PATTERN_SYSTEM_LONG", FEEDBACK_PATTERN_SYSTEM_LONG},
+       {"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
+       {"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
+       {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
 };
 
-static const char *wearable_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "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_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "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_CHARGING_ERROR",
-       "FEEDBACK_PATTERN_CHARGING_ERROR_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_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SCREEN_CAPTURE",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_SEND_SOS_MESSAGE",
-       "FEEDBACK_PATTERN_RINGER",
-       "FEEDBACK_PATTERN_NOTIFICATION",
-       "FEEDBACK_PATTERN_INFO",
-       "FEEDBACK_PATTERN_WARNING",
-       "FEEDBACK_PATTERN_ERROR",
-       "FEEDBACK_PATTERN_EMERGENCY",
+static const struct pattern_field wearable_str_pattern[] = {
+       {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
+       {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
+
+       {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
+       {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
+       {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
+       {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
+       {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
+       {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
+       {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
+       {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
+       {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
+       {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
+       {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
+       {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
+       {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
+       {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
+
+       {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
+       {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
+
+       {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
+       {"FEEDBACK_PATTERN_MESSAGE_ON_CALL", FEEDBACK_PATTERN_MESSAGE_ON_CALL},
+       {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
+       {"FEEDBACK_PATTERN_EMAIL_ON_CALL", FEEDBACK_PATTERN_EMAIL_ON_CALL},
+       {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
+       {"FEEDBACK_PATTERN_WAKEUP_ON_CALL", FEEDBACK_PATTERN_WAKEUP_ON_CALL},
+       {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
+       {"FEEDBACK_PATTERN_SCHEDULE_ON_CALL", FEEDBACK_PATTERN_SCHEDULE_ON_CALL},
+       {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
+       {"FEEDBACK_PATTERN_TIMER_ON_CALL", FEEDBACK_PATTERN_TIMER_ON_CALL},
+       {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
+       {"FEEDBACK_PATTERN_GENERAL_ON_CALL", FEEDBACK_PATTERN_GENERAL_ON_CALL},
+
+       {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
+       {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
+       {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
+       {"FEEDBACK_PATTERN_CHARGERCONN_ON_CALL", FEEDBACK_PATTERN_CHARGERCONN_ON_CALL},
+       {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
+       {"FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL", FEEDBACK_PATTERN_CHARGING_ERROR_ON_CALL},
+       {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
+       {"FEEDBACK_PATTERN_FULLCHARGED_ON_CALL", FEEDBACK_PATTERN_FULLCHARGED_ON_CALL},
+       {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
+       {"FEEDBACK_PATTERN_LOWBATT_ON_CALL", FEEDBACK_PATTERN_LOWBATT_ON_CALL},
+       {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
+       {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
+
+       {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
+       {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
+       {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
+       {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
+
+       {"FEEDBACK_PATTERN_SCREEN_CAPTURE", FEEDBACK_PATTERN_SCREEN_CAPTURE},
+       {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
+       {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
+       {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
+
+       {"FEEDBACK_PATTERN_SEND_SOS_MESSAGE", FEEDBACK_PATTERN_SEND_SOS_MESSAGE},
+       {"FEEDBACK_PATTERN_SYSTEM_SHORT", FEEDBACK_PATTERN_SYSTEM_SHORT},
+       {"FEEDBACK_PATTERN_SYSTEM_ERROR", FEEDBACK_PATTERN_SYSTEM_ERROR},
+       {"FEEDBACK_PATTERN_SYSTEM_LONG", FEEDBACK_PATTERN_SYSTEM_LONG},
+       {"FEEDBACK_PATTERN_SYSTEM_MID", FEEDBACK_PATTERN_SYSTEM_MID},
+       {"FEEDBACK_PATTERN_RINGER", FEEDBACK_PATTERN_RINGER},
+       {"FEEDBACK_PATTERN_NOTIFICATION", FEEDBACK_PATTERN_NOTIFICATION},
 };
 
-static const char *common_str_pattern[] = {
-       "FEEDBACK_PATTERN_TAP",
-       "FEEDBACK_PATTERN_SIP",
-       "",
-       "",
-       "",
-       "",
-       "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_KEY_BACK",
-       "FEEDBACK_PATTERN_HOLD",
-       "",
-       "FEEDBACK_PATTERN_HW_TAP",
-       "FEEDBACK_PATTERN_HW_HOLD",
-
-       "FEEDBACK_PATTERN_MESSAGE",
-       "",
-       "FEEDBACK_PATTERN_EMAIL",
-       "",
-       "FEEDBACK_PATTERN_WAKEUP",
-       "",
-       "FEEDBACK_PATTERN_SCHEDULE",
-       "",
-       "FEEDBACK_PATTERN_TIMER",
-       "",
-       "FEEDBACK_PATTERN_GENERAL",
-       "",
-       "",
-
-       "FEEDBACK_PATTERN_POWERON",
-       "FEEDBACK_PATTERN_POWEROFF",
-       "FEEDBACK_PATTERN_CHARGERCONN",
-       "",
-       "FEEDBACK_PATTERN_CHARGING_ERROR",
-       "",
-       "FEEDBACK_PATTERN_FULLCHARGED",
-       "",
-       "FEEDBACK_PATTERN_LOWBATT",
-       "",
-       "FEEDBACK_PATTERN_LOCK",
-       "FEEDBACK_PATTERN_UNLOCK",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_VIBRATION_ON",
-       "FEEDBACK_PATTERN_SILENT_OFF",
-       "FEEDBACK_PATTERN_BT_CONNECTED",
-       "FEEDBACK_PATTERN_BT_DISCONNECTED",
-       "",
-       "",
-       "",
-       "FEEDBACK_PATTERN_LIST_REORDER",
-       "FEEDBACK_PATTERN_LIST_SLIDER",
-       "FEEDBACK_PATTERN_VOLUME_KEY",
-
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
-       "",
+static const struct pattern_field common_str_pattern[] = {
+       {"FEEDBACK_PATTERN_TAP", FEEDBACK_PATTERN_TAP},
+       {"FEEDBACK_PATTERN_SIP", FEEDBACK_PATTERN_SIP},
+
+       {"FEEDBACK_PATTERN_KEY0", FEEDBACK_PATTERN_KEY0},
+       {"FEEDBACK_PATTERN_KEY1", FEEDBACK_PATTERN_KEY1},
+       {"FEEDBACK_PATTERN_KEY2", FEEDBACK_PATTERN_KEY2},
+       {"FEEDBACK_PATTERN_KEY3", FEEDBACK_PATTERN_KEY3},
+       {"FEEDBACK_PATTERN_KEY4", FEEDBACK_PATTERN_KEY4},
+       {"FEEDBACK_PATTERN_KEY5", FEEDBACK_PATTERN_KEY5},
+       {"FEEDBACK_PATTERN_KEY6", FEEDBACK_PATTERN_KEY6},
+       {"FEEDBACK_PATTERN_KEY7", FEEDBACK_PATTERN_KEY7},
+       {"FEEDBACK_PATTERN_KEY8", FEEDBACK_PATTERN_KEY8},
+       {"FEEDBACK_PATTERN_KEY9", FEEDBACK_PATTERN_KEY9},
+       {"FEEDBACK_PATTERN_KEY_STAR", FEEDBACK_PATTERN_KEY_STAR},
+       {"FEEDBACK_PATTERN_KEY_SHARP", FEEDBACK_PATTERN_KEY_SHARP},
+       {"FEEDBACK_PATTERN_KEY_BACK", FEEDBACK_PATTERN_KEY_BACK},
+       {"FEEDBACK_PATTERN_HOLD", FEEDBACK_PATTERN_HOLD},
+
+       {"FEEDBACK_PATTERN_HW_TAP", FEEDBACK_PATTERN_HW_TAP},
+       {"FEEDBACK_PATTERN_HW_HOLD", FEEDBACK_PATTERN_HW_HOLD},
+
+       {"FEEDBACK_PATTERN_MESSAGE", FEEDBACK_PATTERN_MESSAGE},
+
+       {"FEEDBACK_PATTERN_EMAIL", FEEDBACK_PATTERN_EMAIL},
+
+       {"FEEDBACK_PATTERN_WAKEUP", FEEDBACK_PATTERN_WAKEUP},
+
+       {"FEEDBACK_PATTERN_SCHEDULE", FEEDBACK_PATTERN_SCHEDULE},
+
+       {"FEEDBACK_PATTERN_TIMER", FEEDBACK_PATTERN_TIMER},
+
+       {"FEEDBACK_PATTERN_GENERAL", FEEDBACK_PATTERN_GENERAL},
+
+       {"FEEDBACK_PATTERN_POWERON", FEEDBACK_PATTERN_POWERON},
+       {"FEEDBACK_PATTERN_POWEROFF", FEEDBACK_PATTERN_POWEROFF},
+       {"FEEDBACK_PATTERN_CHARGERCONN", FEEDBACK_PATTERN_CHARGERCONN},
+
+       {"FEEDBACK_PATTERN_CHARGING_ERROR", FEEDBACK_PATTERN_CHARGING_ERROR},
+
+       {"FEEDBACK_PATTERN_FULLCHARGED", FEEDBACK_PATTERN_FULLCHARGED},
+
+       {"FEEDBACK_PATTERN_LOWBATT", FEEDBACK_PATTERN_LOWBATT},
+
+       {"FEEDBACK_PATTERN_LOCK", FEEDBACK_PATTERN_LOCK},
+       {"FEEDBACK_PATTERN_UNLOCK", FEEDBACK_PATTERN_UNLOCK},
+
+       {"FEEDBACK_PATTERN_VIBRATION_ON", FEEDBACK_PATTERN_VIBRATION_ON},
+       {"FEEDBACK_PATTERN_SILENT_OFF", FEEDBACK_PATTERN_SILENT_OFF},
+       {"FEEDBACK_PATTERN_BT_CONNECTED", FEEDBACK_PATTERN_BT_CONNECTED},
+       {"FEEDBACK_PATTERN_BT_DISCONNECTED", FEEDBACK_PATTERN_BT_DISCONNECTED},
+
+       {"FEEDBACK_PATTERN_LIST_REORDER", FEEDBACK_PATTERN_LIST_REORDER},
+       {"FEEDBACK_PATTERN_LIST_SLIDER", FEEDBACK_PATTERN_LIST_SLIDER},
+       {"FEEDBACK_PATTERN_VOLUME_KEY", FEEDBACK_PATTERN_VOLUME_KEY},
 };
 
 typedef enum {
@@ -364,19 +303,76 @@ static char *profile_get_name()
        return profile_name;
 }
 
-static const char *profile_str_pattern(int pattern)
+/* Return how many patterns profile supports */
+static int profile_get_num_of_pattern()
 {
        int prof;
 
        prof = get_profile();
 
        if (prof == PROFILE_MOBILE)
-               return mobile_str_pattern[pattern];
+               return ARR_SIZE(mobile_str_pattern);
        else if (prof == PROFILE_WEARABLE)
-               return wearable_str_pattern[pattern];
+               return ARR_SIZE(wearable_str_pattern);
        else
-               return common_str_pattern[pattern];
+               return ARR_SIZE(common_str_pattern);
+}
+
+static const char *profile_str_pattern(int pattern)
+{
+       int prof;
+       int i;
+
+       prof = get_profile();
+
+       if (prof == PROFILE_MOBILE) {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (pattern == mobile_str_pattern[i].id) {
+                               return mobile_str_pattern[i].string;
+                       }
+               }
+       } else if (prof == PROFILE_WEARABLE) {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (pattern == wearable_str_pattern[i].id)
+                               return wearable_str_pattern[i].string;
+               }
+       } else {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (pattern == common_str_pattern[i].id)
+                               return common_str_pattern[i].string;
+               }
+       }
+       return "";
+
+}
+
+static int profile_get_pattern_enum(char *pattern)
+{
+       int prof;
+       int i;
+       int len;
+
+       prof = get_profile();
+
+       len = strlen(pattern);
+       if (prof == PROFILE_MOBILE) {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (!strncmp(pattern, mobile_str_pattern[i].string, len))
+                               return mobile_str_pattern[i].id;
+               }
+       } else if (prof == PROFILE_WEARABLE) {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (!strncmp(pattern, wearable_str_pattern[i].string, len))
+                               return wearable_str_pattern[i].id;
+               }
+       } else {
+               for (i = 0; i < profile_get_num_of_pattern(); i++) {
+                       if (!strncmp(pattern, common_str_pattern[i].string, len))
+                               return common_str_pattern[i].id;
+               }
+       }
 
+       return -1;
 }
 
 //LCOV_EXCL_START Not called Callback
@@ -801,7 +797,7 @@ static bool wearable_get_always_off_case(int type, int pattern)
        if (CHECK_SOUND(type)) {
                if ((wearable_is_notification_type(pattern) || wearable_is_system_type(pattern)) &&
                    callstatus) {
-                       _W("skip %s sound during call", profile_str_pattern(pattern));
+                       _W("skip %d sound during call", pattern);
                        return true;
                }
                /* check if the state of voice recorder is recording */
@@ -968,7 +964,9 @@ static const struct profile_ops feedback_profile_ops = {
        .max_type              = FEEDBACK_TYPE_END,
        .max_pattern           = FEEDBACK_PATTERN_INTERNAL_END,
        .str_type              = profile_str_type,
+       .get_num_of_pattern    = profile_get_num_of_pattern,
        .str_pattern           = profile_str_pattern,
+       .get_pattern_enum      = profile_get_pattern_enum,
 };
 
 PROFILE_OPS_REGISTER(&feedback_profile_ops);
index 9b53726..7b05565 100644 (file)
@@ -62,6 +62,8 @@ typedef GList dd_list;
 #define DEFAULT_VIB_LEVEL       3
 #define HAPTIC_FEEDBACK_STEP    20 /**< feedback max / slider step */
 
+#define ARR_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]))
+
 int is_sound_mode(void);
 int is_touch_sndstatus(void);
 int is_keytone_sndstatus(void);
index 1b436a3..b0eb6e4 100644 (file)
@@ -293,7 +293,7 @@ API int feedback_is_supported_pattern(feedback_type_e type, feedback_pattern_e p
        else if (err == -ECOMM || err == -EACCES)
                return FEEDBACK_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE System Error
        else if (err < 0) {
-               _E("fail to invoke is_supported() : pattern(%s)", profile->str_pattern(pattern)); //LCOV_EXCL_LINE
+               _E("fail to invoke is_supported() : pattern(%d)", pattern); //LCOV_EXCL_LINE
                return FEEDBACK_ERROR_OPERATION_FAILED;
        }
 
index 26b0cb9..87af328 100644 (file)
@@ -39,6 +39,8 @@ struct parse_result {
        char *value;
 };
 
+static int load_config_index = 0;
+
 static inline char *trim_str(char *s)
 {
        char *t;
@@ -142,7 +144,7 @@ static int load_config(struct parse_result *result, void *user_data)
        struct feedback_config_info *info = (struct feedback_config_info *)user_data;
        char *name;
        char *value;
-       int i;
+       int pattern;
 
        if (!info)
                return -EINVAL;
@@ -156,18 +158,17 @@ static int load_config(struct parse_result *result, void *user_data)
        name = result->name;
        value = result->value;
 
-       for (i = 0; i < profile->max_pattern; i++) {
-               if (!profile->str_pattern(i))
-                       continue;
-               if (!MATCH(name, (char *)profile->str_pattern(i)))
-                       continue;
+       pattern = profile->get_pattern_enum(name);
+       if (pattern < 0 || pattern >= profile->max_pattern)
+               return -EINVAL;
 
-               info->data[i].origin = strdup(value);
-               if (!info->data[i].origin)
-                       _E("fail to copy %s sound data", //LCOV_EXCL_LINE
-                                       profile->str_pattern(i));
-               break;
-       }
+       info->data[load_config_index].pattern = pattern;
+
+       info->data[load_config_index].origin = strdup(value);
+       if (!info->data[load_config_index].origin)
+               _E("fail to copy %d sound data", //LCOV_EXCL_LINE
+                               pattern);
+       load_config_index++;
 
        return 0;
 }
@@ -176,17 +177,22 @@ int feedback_load_config(const char *path,
                struct feedback_config_info *info)
 {
        int ret;
+       int i;
 
        if (!path || !info)
                return -EINVAL;
 
        info->data = calloc(1,
-                       sizeof(struct feedback_data) * profile->max_pattern);
+                       sizeof(struct feedback_data) * profile->get_num_of_pattern());
        if (!info->data) {
                _E("fail to allocate %s data", path); //LCOV_EXCL_LINE
                return -ENOMEM; //LCOV_EXCL_LINE System Error
        }
 
+       for (i = 0; i < profile->get_num_of_pattern(); i++) {
+               info->data[i].pattern = -1;
+       }
+
        ret = config_parse(path, load_config, info);
        if (ret < 0)
                _E("Failed to load %s, %d Use default value!", //LCOV_EXCL_LINE
@@ -205,7 +211,7 @@ void feedback_free_config(struct feedback_config_info *info)
        if (!profile)
                return;
 
-       for (i = 0; i < profile->max_pattern; i++) {
+       for (i = 0; i < profile->get_num_of_pattern(); i++) {
                if (info->data[i].origin) {
                        free(info->data[i].origin);
                        info->data[i].origin = NULL;
@@ -218,4 +224,5 @@ void feedback_free_config(struct feedback_config_info *info)
 
        free(info->data);
        info->data = NULL;
+       load_config_index = 0;
 }
index 108e625..97cdd65 100644 (file)
@@ -19,6 +19,7 @@
 #define __PARSER_H__
 
 struct feedback_data {
+       int pattern;
        char *origin;
        char *changed;
 };
index 508205b..96f1ece 100644 (file)
@@ -44,6 +44,13 @@ struct profile_ops {
        const int max_pattern;
        const char **str_type;
        const char *(*str_pattern)(int pattern);
+       int (*get_pattern_enum)(char *pattern);
+       int (*get_num_of_pattern)(void);
+};
+
+struct pattern_field {
+       char *string;
+       int id;
 };
 
 #define PROFILE_OPS_REGISTER(ops)      \
index 1a5bc35..f6fb699 100644 (file)
@@ -51,15 +51,28 @@ static struct feedback_config_info sound_info = {
 static char *get_data(feedback_pattern_e pattern)
 {
        char *data;
+       int i;
+       int index = -1;
 
        if (pattern <= FEEDBACK_PATTERN_NONE ||
            pattern >= profile->max_pattern)
                return NULL;
 
-       if (sound_info.data[pattern].changed)
-               data = sound_info.data[pattern].changed;
+       for (i = 0; i < profile->get_num_of_pattern(); i++) {
+               if (pattern == sound_info.data[i].pattern) {
+                       index = i;
+                       break;
+               }
+       }
+       if (index < 0) {
+               _E("Not supported pattern : %d", pattern);
+               return NULL;
+       }
+
+       if (sound_info.data[index].changed)
+               data = sound_info.data[index].changed;
        else
-               data = sound_info.data[pattern].origin;
+               data = sound_info.data[index].origin;
 
        return data;
 }
@@ -150,7 +163,7 @@ static int sound_play(feedback_pattern_e pattern)
        /* get sound file path */
        path = get_data(pattern);
        if (!path || stat(path, &buf)) {
-               _E("Not supported sound pattern(path %s pattern %d)", path, pattern); //LCOV_EXCL_LINE
+               _E("Not supported sound pattern(pattern %d)", pattern); //LCOV_EXCL_LINE
                return -ENOTSUP;
        }
 
@@ -186,7 +199,7 @@ static int sound_is_supported(feedback_pattern_e pattern, bool *supported)
        /* get sound file path */
        path = get_data(pattern);
        if (!path || stat(path, &buf)) {
-               _E("%s is not presents", path);
+               _D("%d is not presents", pattern);
                ret = false;
        }
 
@@ -218,6 +231,8 @@ static int sound_get_path(feedback_pattern_e pattern, char *buf, unsigned int bu
 static int sound_set_path(feedback_pattern_e pattern, char *path)
 {
        struct stat buf;
+       int i;
+       int index = -1;
 
        /*
         * check the path is valid
@@ -228,14 +243,42 @@ static int sound_set_path(feedback_pattern_e pattern, char *path)
                return -errno;
        }
 
-       if (sound_info.data[pattern].changed) {
-               free(sound_info.data[pattern].changed);
-               sound_info.data[pattern].changed = NULL;
+       if (!profile->str_pattern(pattern)) {
+               _E("%d is not supported", pattern);
+               return -EPERM;
+       }
+
+       for (i = 0; i < profile->get_num_of_pattern(); i++) {
+               if (pattern == sound_info.data[i].pattern) {
+                       index = i;
+                       break;
+               }
+       }
+
+       if (index < 0) {
+               for (i = 0; i < profile->get_num_of_pattern(); i++) {
+                       if (sound_info.data[i].pattern != -1)
+                               continue;
+
+                       sound_info.data[i].pattern = pattern;
+                       sound_info.data[i].changed = strdup(path);
+                       _D("The file of pattern(%s) is changed to [%s]",
+                                       profile->str_pattern(pattern), path);
+
+                       return 0;
+               }
+               _E("%d is not supported", pattern);
+               return -EPERM;
+       }
+
+       if (sound_info.data[index].changed) {
+               free(sound_info.data[index].changed);
+               sound_info.data[index].changed = NULL;
        }
 
        /* if path is NULL, this pattern set to default file */
        if (path)
-               sound_info.data[pattern].changed = strdup(path);
+               sound_info.data[index].changed = strdup(path);
 
        _D("The file of pattern(%s) is changed to [%s]",
                        profile->str_pattern(pattern), path);