优化ConfigModel,修复读写keyname命名规则 cJSON与KVStore的兼容问题 352/1 352/head 353/target/1 354/target/1
authorSnickerSun <snickersun@163.com>
Fri, 21 Jun 2024 23:37:13 +0000 (07:37 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 21 Jun 2024 23:37:13 +0000 (07:37 +0800)
code/sdk/drivers/peripheral/config/include/ConfigModel.h
code/sdk/drivers/peripheral/config/src/ConfigModel.cpp

index 0b93600..9c3f823 100644 (file)
@@ -12,7 +12,7 @@
 #endif
 
 
-// #define USE_KVSTORE_STORE_CONFIG
+#define USE_KVSTORE_STORE_CONFIG
 
 
 struct dial_config
@@ -264,51 +264,51 @@ namespace OHOS
     private:
         configmodel_item configmodel_item_key_name[CONFIGMODEL_ITEM_MAX] =
         {
-            {ConfigDataType::DATATYPE_BOOL,    "ClassicBT_Service_On",     "true"  },// CONFIGMODEL_ITEM_CLASSIC_BT_SERVICE_ON, //关机前经典蓝牙服务状态,启动时仍然恢复其当时状态
-            {ConfigDataType::DATATYPE_INT,     "ScreenBrightness",         "255"    },//CONFIGMODEL_ITEM_SCREEN_BRIGHTNESS_VALUE,   //屏幕亮度
-            {ConfigDataType::DATATYPE_INT,     "ScreenOffTimeoutValue",    "5000"  },//CONFIGMODEL_ITEM_SCREEN_OFF_TIMEOUT_VALUE,   //屏幕自动息屏时间 默认 5秒 5000ms
-            {ConfigDataType::DATATYPE_BOOL,    "Cat1_Service_On",          "false" },//CONFIGMODEL_ITEM_CAT1_SERVICE_ON, // 关机前Cat1 Service启动着,则重启仍然启动,反之亦然
-            {ConfigDataType::DATATYPE_STRING,  "Cat1_IMEI",                ""      },//CONFIGMODEL_ITEM_CAT1_IMEI,
-            {ConfigDataType::DATATYPE_STRING,  "Cat1_ModemVer",            ""      },//CONFIGMODEL_ITEM_CAT1_MODEMVER,
-            {ConfigDataType::DATATYPE_STRING,  "Cat1_PYVer",               ""      },//CONFIGMODEL_ITEM_CAT1_PYVER,
-            {ConfigDataType::DATATYPE_INT,     "LanguageID",               "-1"    },//CONFIGMODEL_ITEM_LANGUAGE_ID, //默认没有选择语言
-            {ConfigDataType::DATATYPE_STRING,  "LanguageCode",             ""      },//CONFIGMODEL_ITEM_LANGUAGE_CODE, //默认没有选择语言
-            {ConfigDataType::DATATYPE_INT,     "TimeZone",                 "32"      },//CONFIGMODEL_ITEM_TIMEZONE, //单位刻钟  默认+8 小时 = 4*8 = 32 刻钟
-            {ConfigDataType::DATATYPE_BOOL,    "SlientMode",               "false" },//CONFIGMODEL_ITEM_SILENT_MODE,
-            {ConfigDataType::DATATYPE_INT,     "VibratorSwitch",           "1"     },//CONFIGMODEL_ITEM_VIBRATOR_SWITCH, // 马达 开关,0 强,1 中,2 弱,3 关
-            {ConfigDataType::DATATYPE_BOOL,    "Rase2Wake",                "true"  },//CONFIGMODEL_ITEM_RAISE_TO_WAKE,
-            {ConfigDataType::DATATYPE_INT,     "StepCount",                "0"     },//CONFIGMODEL_ITEM_ACTIVITY_VALUES_STEPCOUNT,      //活动数据步数
-            {ConfigDataType::DATATYPE_INT,     "Calories",                 "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_CALORIES,      //活动数据卡路里,
-            {ConfigDataType::DATATYPE_INT,     "StandupTimes",             "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_STANDUP_TIMES, //活动数据站立次数
-            {ConfigDataType::DATATYPE_INT,     "Duration",                 "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_DURATION,  //活动数据运动时间
-            {ConfigDataType::DATATYPE_DOUBLE,  "Distance",                 "0.0"   },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_DISTANCE, //活动数据运动距离
-            {ConfigDataType::DATATYPE_INT,     "ActivityTimestamp",        "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_TIMESTAMP, //活动数据更新时间戳
+            {ConfigDataType::DATATYPE_BOOL,    "classicbt_service_on",     "true"  },// CONFIGMODEL_ITEM_CLASSIC_BT_SERVICE_ON, //关机前经典蓝牙服务状态,启动时仍然恢复其当时状态
+            {ConfigDataType::DATATYPE_INT,     "screen_brightness",         "255"    },//CONFIGMODEL_ITEM_SCREEN_BRIGHTNESS_VALUE,   //屏幕亮度
+            {ConfigDataType::DATATYPE_INT,     "screenoff_timeout_value",    "5000"  },//CONFIGMODEL_ITEM_SCREEN_OFF_TIMEOUT_VALUE,   //屏幕自动息屏时间 默认 5秒 5000ms
+            {ConfigDataType::DATATYPE_BOOL,    "cat1_service_on",          "false" },//CONFIGMODEL_ITEM_CAT1_SERVICE_ON, // 关机前Cat1 Service启动着,则重启仍然启动,反之亦然
+            {ConfigDataType::DATATYPE_STRING,  "cat1_imei",                ""      },//CONFIGMODEL_ITEM_CAT1_IMEI,
+            {ConfigDataType::DATATYPE_STRING,  "cat1_modemver",            ""      },//CONFIGMODEL_ITEM_CAT1_MODEMVER,
+            {ConfigDataType::DATATYPE_STRING,  "cat1_pyver",               ""      },//CONFIGMODEL_ITEM_CAT1_PYVER,
+            {ConfigDataType::DATATYPE_INT,     "language_id",               "-1"    },//CONFIGMODEL_ITEM_LANGUAGE_ID, //默认没有选择语言
+            {ConfigDataType::DATATYPE_STRING,  "language_code",             ""      },//CONFIGMODEL_ITEM_LANGUAGE_CODE, //默认没有选择语言
+            {ConfigDataType::DATATYPE_INT,     "timezone",                 "32"      },//CONFIGMODEL_ITEM_TIMEZONE, //单位刻钟  默认+8 小时 = 4*8 = 32 刻钟
+            {ConfigDataType::DATATYPE_BOOL,    "slient_mode",               "false" },//CONFIGMODEL_ITEM_SILENT_MODE,
+            {ConfigDataType::DATATYPE_INT,     "vibrator_switch",           "1"     },//CONFIGMODEL_ITEM_VIBRATOR_SWITCH, // 马达 开关,0 强,1 中,2 弱,3 关
+            {ConfigDataType::DATATYPE_BOOL,    "rase2wake",                "true"  },//CONFIGMODEL_ITEM_RAISE_TO_WAKE,
+            {ConfigDataType::DATATYPE_INT,     "stepcount",                "0"     },//CONFIGMODEL_ITEM_ACTIVITY_VALUES_STEPCOUNT,      //活动数据步数
+            {ConfigDataType::DATATYPE_INT,     "calories",                 "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_CALORIES,      //活动数据卡路里,
+            {ConfigDataType::DATATYPE_INT,     "standup_times",             "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_STANDUP_TIMES, //活动数据站立次数
+            {ConfigDataType::DATATYPE_INT,     "duration",                 "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_DURATION,  //活动数据运动时间
+            {ConfigDataType::DATATYPE_DOUBLE,  "distance",                 "0.0"   },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_DISTANCE, //活动数据运动距离
+            {ConfigDataType::DATATYPE_INT,     "activity_timestamp",        "0"     },// CONFIGMODEL_ITEM_ACTIVITY_VALUES_TIMESTAMP, //活动数据更新时间戳
             {ConfigDataType::DATATYPE_INT,     "height",                   "175"   },// CONFIGMODEL_ITEM_CUSTOM_DATA_HEIGHT,    //用户数据身高 (cm)(身高)(default : 175)(30 - 300)
             {ConfigDataType::DATATYPE_INT,     "weight",                   "70"  },// CONFIGMODEL_ITEM_CUSTOM_DATA_WEIGHT,    //用户数据体重 (kg)(體重)(default : 70)(10 - 300)
             {ConfigDataType::DATATYPE_INT,     "sex",                      "1"     },// CONFIGMODEL_ITEM_CUSTOM_DATA_SEX,    //用户数据性别 (default : 1 男性)(0 : 女性, 1 : 男性)
             {ConfigDataType::DATATYPE_INT,     "age",                      "30"    },// CONFIGMODEL_ITEM_CUSTOM_DATA_AGE,    //用户数据年龄 (年紀)(default : 30)(1 - 99)
-            {ConfigDataType::DATATYPE_INT,     "WearingMode",              "0"     },// CONFIGMODEL_ITEM_CUSTOM_DATA_WEARING_MODE,    //用户数据佩戴方式 (default : 左手)(0 : 左手 1 : 右手)
-            {ConfigDataType::DATATYPE_INT,     "GoalStepCount",            "10000" },// CONFIGMODEL_ITEM_SPORTS_GOAL_STEPCOUNT,    //运动目标步数  10000
-            {ConfigDataType::DATATYPE_INT,     "GoalCalories",             "300"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_CALORIES,    //运动目标卡路里  300(kcal)
-            {ConfigDataType::DATATYPE_INT,     "GoalStandupTimes",         "10"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_STANDUP_TIMES,    //运动目标站立次数 10
-            {ConfigDataType::DATATYPE_INT,     "GoalDuration",             "30"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION,    //运动目标时长   30(分钟)
-            {ConfigDataType::DATATYPE_INT,     "GoalDistance",             "8"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离   8.0(km)
-            {ConfigDataType::DATATYPE_BOOL,    "Dnotdisturb",              "false" },// CONFIGMODEL_ITEM_DNOTDISTURB //勿扰模式默认关闭
-            {ConfigDataType::DATATYPE_INT,     "SystemVolume",             "100"  },// CONFIGMODEL_ITEM_SYSTEM_VOLUME //
-            {ConfigDataType::DATATYPE_INT,     "CallVolume",               "100"  },// CONFIGMODEL_ITEM_CALL_VOLUME //
+            {ConfigDataType::DATATYPE_INT,     "wearing_mode",              "0"     },// CONFIGMODEL_ITEM_CUSTOM_DATA_WEARING_MODE,    //用户数据佩戴方式 (default : 左手)(0 : 左手 1 : 右手)
+            {ConfigDataType::DATATYPE_INT,     "goal_stepcount",            "10000" },// CONFIGMODEL_ITEM_SPORTS_GOAL_STEPCOUNT,    //运动目标步数  10000
+            {ConfigDataType::DATATYPE_INT,     "goal_calories",             "300"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_CALORIES,    //运动目标卡路里  300(kcal)
+            {ConfigDataType::DATATYPE_INT,     "goal_standup_times",         "10"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_STANDUP_TIMES,    //运动目标站立次数 10
+            {ConfigDataType::DATATYPE_INT,     "goal_duration",             "30"    },// CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION,    //运动目标时长   30(分钟)
+            {ConfigDataType::DATATYPE_INT,     "goal_distance",             "8"   },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE,    //运动目标距离   8.0(km)
+            {ConfigDataType::DATATYPE_BOOL,    "dnotdisturb",              "false" },// CONFIGMODEL_ITEM_DNOTDISTURB //勿扰模式默认关闭
+            {ConfigDataType::DATATYPE_INT,     "system_volume",             "100"  },// CONFIGMODEL_ITEM_SYSTEM_VOLUME //
+            {ConfigDataType::DATATYPE_INT,     "call_volume",               "100"  },// CONFIGMODEL_ITEM_CALL_VOLUME //
             {ConfigDataType::DATATYPE_BOOL,    "VoLTECall",                "false" },// CONFIGMODEL_ITEM_VOLTE_CALL
-            {ConfigDataType::DATATYPE_BOOL,    "MotionRecognition",        "false" },// CONFIGMODEL_ITEM_MOTIONRECOGNITION
-            {ConfigDataType::DATATYPE_BOOL,    "HFP",                      "false" },// CONFIGMODEL_ITEM_HFP
-            {ConfigDataType::DATATYPE_BOOL,    "A2DP",                     "false" },// CONFIGMODEL_ITEM_A2DP
-            {ConfigDataType::DATATYPE_BOOL,    "SPP",                      "true" },// CONFIGMODEL_ITEM_SPP,//SPP蓝牙开关
+            {ConfigDataType::DATATYPE_BOOL,    "motion_recognition",        "false" },// CONFIGMODEL_ITEM_MOTIONRECOGNITION
+            {ConfigDataType::DATATYPE_BOOL,    "hfp",                      "false" },// CONFIGMODEL_ITEM_HFP
+            {ConfigDataType::DATATYPE_BOOL,    "a2dp",                     "false" },// CONFIGMODEL_ITEM_A2DP
+            {ConfigDataType::DATATYPE_BOOL,    "spp",                      "true" },// CONFIGMODEL_ITEM_SPP,//SPP蓝牙开关
             {ConfigDataType::DATATYPE_INT,     "traningfreq",              "10"     },// CONFIGMODEL_ITEM_TRANING_FREQ //训练实时数据上传频率//单位秒
-            {ConfigDataType::DATATYPE_BOOL,    "traningauto",              "0"      },//CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
+            {ConfigDataType::DATATYPE_INT,    "traningauto",              "0"      },//CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
             {ConfigDataType::DATATYPE_INT,     "traningheart",             "190"  },//CONFIGMODEL_ITEM_TRAINING_HEART_MAX//训练最高心率
-            {ConfigDataType::DATATYPE_INT,     "HeartRateDetected",        "0"     },// CONFIGMODEL_ITEM_HEARTRATE_DETECTED//心率周期检测频率
-            {ConfigDataType::DATATYPE_INT,     "HeartRateMax",             "0"     },// CONFIGMODEL_ITEM_HEARTRATE_MAX//最大心率
-            {ConfigDataType::DATATYPE_INT,     "HeartRateMin",             "0"     },// CONFIGMODEL_ITEM_HEARTRATE_MIN//最小心率
-            {ConfigDataType::DATATYPE_BOOL,    "Notify",                   "0"     },// CONFIGMODEL_ITEM_NOTIFY//消息通知开关
-            {ConfigDataType::DATATYPE_INT,     "QuickAuxilParameter",      "0"     },// CONFIGMODEL_ITEM_QUICK_AUXILIARY_PARAMETERS//快捷辅助功能参数
+            {ConfigDataType::DATATYPE_INT,     "heartrate_detected",        "0"     },// CONFIGMODEL_ITEM_HEARTRATE_DETECTED//心率周期检测频率
+            {ConfigDataType::DATATYPE_INT,     "heartrate_max",             "0"     },// CONFIGMODEL_ITEM_HEARTRATE_MAX//最大心率
+            {ConfigDataType::DATATYPE_INT,     "heartrate_min",             "0"     },// CONFIGMODEL_ITEM_HEARTRATE_MIN//最小心率
+            {ConfigDataType::DATATYPE_INT,    "notify",                   "0"     },// CONFIGMODEL_ITEM_NOTIFY//消息通知开关
+            {ConfigDataType::DATATYPE_INT,     "quick_auxil_parameter",      "0"     },// CONFIGMODEL_ITEM_QUICK_AUXILIARY_PARAMETERS//快捷辅助功能参数
             {ConfigDataType::DATATYPE_INT,     "drink",                    "0" },// CONFIGMODEL_ITEM_DRINK,//开关 0 关闭 1开始 2间隔提醒
             {ConfigDataType::DATATYPE_INT,     "drinkgoal",                "0" },// CONFIGMODEL_ITEM_DRINK_GOAL,//目标。ml
             {ConfigDataType::DATATYPE_INT,     "drinkstart",               "0" }, // CONFIGMODEL_ITEM_DRINK_START,//提醒开始时间 int类型 前16位小时,后16位分钟
@@ -318,7 +318,7 @@ namespace OHOS
             {ConfigDataType::DATATYPE_INT,     "sleep_bedtime",            "0" }, //CONFIGMODEL_ITEM_SLEEP_BEDTIME,//就寝时间
             {ConfigDataType::DATATYPE_INT,     "sleep_getup",              "0" }, // CONFIGMODEL_ITEM_SLEEP_GET_UP,//起床时间
             {ConfigDataType::DATATYPE_INT,     "sleep_remide",             "0" }, // CONFIGMODEL_ITEM_SLEEP_REMIND,//提前20分钟提醒开关
-            {ConfigDataType::DATATYPE_BOOL,    "sedentary_switch",         "false"       }, // CONFIGMODEL_ITEM_SEDENTARY_SWITCH,//久坐提醒开关
+            {ConfigDataType::DATATYPE_INT,    "sedentary_switch",         "0"       }, // CONFIGMODEL_ITEM_SEDENTARY_SWITCH,//久坐提醒开关
             {ConfigDataType::DATATYPE_INT,     "sedentary_interval",       "1"           }, // CONFIGMODEL_ITEM_SEDENTARY_INTERVAL,//久坐提醒时间间隔
             {ConfigDataType::DATATYPE_INT,     "sedentary_reminderTime",     "0"           }, // CONFIGMODEL_ITEM_SEDENTARY_REMINDERTIME,//久坐提醒时间段 前16位是开始时间 前8 为小时 后8为分钟  后16位为结束时间规则同前  例: 1600 0B00 11点开始到 22点结束
             {ConfigDataType::DATATYPE_STRING,     "password",               "000000"       },  //CONFIGMODEL_ITEM_PASSWORD  //手表密码  CONFIGMODEL_ITEM_SWITCH  
@@ -346,10 +346,10 @@ namespace OHOS
         void DumpItem(ConfigItem item);
         void DumpData(void);
 #ifdef USE_KVSTORE_STORE_CONFIG
-        std::string ReadKVData_String(const char *field_name);
-        double ReadKVData_Double(const char *field_name);
-        int ReadKVData_Int(const char *field_name);
-        bool ReadKVData_Bool(const char *field_name);
+        std::string ReadKVData_String(ConfigItem item,const char *field_name);
+        double ReadKVData_Double(ConfigItem item,const char *field_name);
+        int ReadKVData_Int(ConfigItem item,const char *field_name);
+        bool ReadKVData_Bool(ConfigItem item,const char *field_name);
 
         void WriteKVData_Int(const char *field_name, int data);
         void WriteKVData_Double(const char *field_name, double data);
index fdf3f96..bac5621 100644 (file)
@@ -5,8 +5,12 @@
 
 #include "kv_store.h"
 #include "kvstore_env.h"
-
-
+#if DEBUG_CONFIGMODEL
+#define CONFIG_DEBUG(fmt, arg...) printf("ConfigModel|" fmt, ##arg)
+#else
+#define CONFIG_DEBUG
+#endif
+// #define DEBUG_LINE()  printf("%s %d\n",__func__,__LINE__)
 namespace OHOS
 {
     #define MAX_NUM_BUF_LEN 32
@@ -73,7 +77,7 @@ namespace OHOS
      /// @brief 显示读取到的json数据
     void ConfigModel::DumpData(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "/* -------------------------------- JsonData: ------------------------------- */\n");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "/* -------------------------------- ConfigData: ------------------------------- */\n");
         for (int i = 0; i< ConfigItem::CONFIGMODEL_ITEM_MAX;i++)
         {
             DumpItem((ConfigItem)i);
@@ -82,10 +86,17 @@ namespace OHOS
     }
 #ifdef USE_KVSTORE_STORE_CONFIG
 
-    std::string ConfigModel::ReadKVData_String(const char *field_name)
+    std::string ConfigModel::ReadKVData_String(ConfigItem item,const char *field_name)
     {
         char* stringtmp=(char*)malloc(MAX_STRING_DATA_LEN);
+        if (stringtmp == NULL) return "-2";
         int value_len = UtilsGetValue(field_name,stringtmp,MAX_STRING_DATA_LEN);
+        if (value_len<0)
+        {
+            reset_item_to_default(item);
+            memset(stringtmp,0,MAX_STRING_DATA_LEN);
+            value_len = UtilsGetValue(field_name,stringtmp,MAX_STRING_DATA_LEN);
+        }
         if (value_len<0)//没有变量则用默认值初始化
         {
             free(stringtmp);
@@ -98,16 +109,34 @@ namespace OHOS
             return ret;
         }                
     }
-    double ConfigModel::ReadKVData_Double(const char *field_name)
+    double ConfigModel::ReadKVData_Double(ConfigItem item,const char *field_name)
     {
 
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return 0.0f;
         int value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
-        double ret = 0.0f;
+        if (value_len<0)
+        {
+            reset_item_to_default(item);
+            memset(buf,0,MAX_NUM_BUF_LEN);
+            value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
+        }
+        int flag = 1;
+        char* pchar = buf;
 
+        if ( buf[0] == '-') 
+        {
+            flag=-1;
+            pchar=pchar+1;
+        }else if (pchar[0] == '+')
+        {
+            flag=1;
+            pchar=pchar+1;
+        }
+        double ret =  0.0f; 
         if (value_len >=0)
         {
-            ret = atof(buf);
+            ret = atof(pchar)*flag;  
             free(buf);
             return ret;
         }
@@ -117,15 +146,33 @@ namespace OHOS
             return 0.0f;
         }
     }
-    int ConfigModel::ReadKVData_Int(const char *field_name)
+    int ConfigModel::ReadKVData_Int(ConfigItem item,const char *field_name)
     {
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return 0;
         int value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
+        if (value_len<0)
+        {
+            reset_item_to_default(item);
+            memset(buf,0,MAX_NUM_BUF_LEN);
+            value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
+        }
         int ret = 0;
-
+        int flag = 1;
+        char* pchar = buf;
+        if ( buf[0] == '-') 
+        {
+            flag=-1;
+            pchar=pchar+1;
+        }else if (pchar[0] == '+')
+        {
+            flag=1;
+            pchar=pchar+1;
+        }
         if (value_len >=0)
         {
-            ret = atoi(buf);
+            ret = atoi(pchar)*flag;
+            CONFIG_DEBUG("ReadKVData_Int %s = %s (%d), ret=%d\n",field_name,buf,value_len,ret);
             free(buf);
             return ret;
         }
@@ -135,20 +182,40 @@ namespace OHOS
             return 0;
         }
     }
-    bool ConfigModel::ReadKVData_Bool(const char *field_name)
+    bool ConfigModel::ReadKVData_Bool(ConfigItem item,const char *field_name)
     {
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return false;
         int value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
+        CONFIG_DEBUG("ReadKVData_Bool %s = %s (%d)\n",field_name,buf,value_len);
+        if (value_len<0)
+        {
+            reset_item_to_default(item);
+            memset(buf,0,MAX_NUM_BUF_LEN);
+            value_len = UtilsGetValue(field_name,buf,MAX_NUM_BUF_LEN);
+            CONFIG_DEBUG("ReadKVData_Bool %s = %s (%d)\n",field_name,buf,value_len);
+        }
         int ret = 0;
-
         if (value_len >=0)
         {
-            ret = atoi(buf);
+            if (strlen(buf)>0 && strlen(buf)<4) 
+            {
+                ret = 0;
+            }
+            else if (strncmp("true",buf,4) == 0)
+            {
+                ret = 1;
+            }  
+            CONFIG_DEBUG("ReadKVData_Bool %s = %s (%d),ret %d\n",field_name,buf,value_len,ret);
             free(buf);
             if(ret > 0)
+            {
                 return true;
+            } 
             else
+            {
                 return false;
+            }
         }
         else
         {
@@ -160,48 +227,56 @@ namespace OHOS
     void ConfigModel::WriteKVData_Int(const char *field_name, int data)
     {
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return ;
         memset(buf,0,MAX_NUM_BUF_LEN);
         sprintf_s(buf,32,"%d",data);
-        UtilsSetValue(field_name,buf);
+        int ret = UtilsSetValue(field_name,buf);
+        CONFIG_DEBUG("WriteKVData_Int %s %s,ret %d\n",field_name,buf,ret);
         free(buf);
     }
     void ConfigModel::WriteKVData_Double(const char *field_name, double data)
     {
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return ;
         memset(buf,0,MAX_NUM_BUF_LEN);
         sprintf_s(buf,32,"%f",data);
-        UtilsSetValue(field_name,buf);
+        int ret = UtilsSetValue(field_name,buf);
+        CONFIG_DEBUG("WriteKVData_Double %s %s,ret %d\n",field_name,buf,ret);
         free(buf);
     }
     void ConfigModel::WriteKVData_Bool(const char *field_name, bool data)
     {
         char *buf = (char*)malloc(MAX_NUM_BUF_LEN);
+        if (buf == NULL) return ;
         memset(buf,0,MAX_NUM_BUF_LEN);
-        sprintf_s(buf,32,"%d",data);
-        UtilsSetValue(field_name,buf);
+        sprintf_s(buf,32,"%s",data?"true":"false");
+        int ret = UtilsSetValue(field_name,buf);
+        CONFIG_DEBUG("WriteKVData_Bool %s %s,ret %d\n",field_name,buf,ret);
         free(buf);
     }
     void ConfigModel::WriteKVData_String(const char *field_name, const char *data)
     {
         char *buf = (char*)malloc(MAX_STRING_DATA_LEN);
+        if (buf == NULL) return ;
         memset(buf,0,MAX_STRING_DATA_LEN);
         sprintf_s(buf,MAX_STRING_DATA_LEN,"%s",data);
+        CONFIG_DEBUG("%s %s\n",field_name,buf);
         UtilsSetValue(field_name,buf);
         free(buf);
     }
     bool ConfigModel::LoadKVData()
     {
-        char* buf=(char*)malloc(MAX_STRING_DATA_LEN);
-        for (int i = 0; i< ConfigItem::CONFIGMODEL_ITEM_MAX;i++)
-        {
-            ConfigItem item = (ConfigItem)i;
-            int ret = UtilsGetValue(get_config_name(item),buf,MAX_STRING_DATA_LEN);
-            if (ret < 0) //没有变量则用默认值初始化
-            {
-                reset_item_to_default(item);
-            }
-        }
-        free(buf);        
+        // char* buf=(char*)malloc(MAX_STRING_DATA_LEN);
+        // for (int i = 0; i< ConfigItem::CONFIGMODEL_ITEM_MAX;i++)
+        // {
+        //     ConfigItem item = (ConfigItem)i;
+        //     int ret = UtilsGetValue(get_config_name(item),buf,MAX_STRING_DATA_LEN);
+        //     if (ret < 0) //没有变量则用默认值初始化
+        //     {
+        //         reset_item_to_default(item);
+        //     }
+        // }
+        // free(buf);        
         return true;
     }
 #else
@@ -570,39 +645,69 @@ namespace OHOS
                 
                 {
                     bool defaultvalue = false;
-                    if (strncmp(configmodel_item_key_name[item].defaultValue,"true",sizeof("true"))==0) defaultvalue = true;
+                    CONFIG_DEBUG("reset item[%d]%s=%s\n",item,configmodel_item_key_name[item].itemname,configmodel_item_key_name[item].defaultValue);
+                    if (strncmp(configmodel_item_key_name[item].defaultValue,"true",4)==0) defaultvalue = true;
                     set_condigData_Bool(item,defaultvalue);
                 }
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(bool):value(%d)", 
-                                get_config_name(item),
-                                get_configData_bool(item));
+                // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(bool):value(%d)", 
+                //                 get_config_name(item),
+                //                 get_configData_bool(item));
                 break;
             case ConfigDataType::DATATYPE_DOUBLE:
                 {
-                    double defaultvalue = atof(configmodel_item_key_name[item].defaultValue);
+
+                    int flag = 1;
+                    char* pchar = configmodel_item_key_name[item].defaultValue;
+
+                    if ( pchar[0] == '-') 
+                    {
+                        flag=-1;
+                        pchar=pchar+1;
+                    }else if (pchar[0] == '+')
+                    {
+                        flag=1;
+                        pchar=pchar+1;
+                    }
+                    double defaultvalue = atof(pchar)*flag;
+                    CONFIG_DEBUG("item[%d]%s=%s , %f\n",item,configmodel_item_key_name[item].itemname,configmodel_item_key_name[item].defaultValue,defaultvalue);
                     set_condigData_Double(item,defaultvalue); 
                 }
                 
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(double):value(%f)", 
-                                get_config_name(item),
-                                get_configData_double(item));
+                // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(double):value(%f)", 
+                //                 get_config_name(item),
+                //                 get_configData_double(item));
                 break;
             case ConfigDataType::DATATYPE_INT :
                 {
-                    int defaultvalue = atoi(configmodel_item_key_name[item].defaultValue);
+
+                    int flag = 1;
+                    char* pchar = configmodel_item_key_name[item].defaultValue;
+
+                    if ( pchar[0] == '-') 
+                    {
+                        flag=-1;
+                        pchar=pchar+1;
+                    }else if (pchar[0] == '+')
+                    {
+                        flag=1;
+                        pchar=pchar+1;
+                    }
+                    int defaultvalue = atoi(pchar)*flag;
+                    CONFIG_DEBUG("item[%d]%s=%s , %d\n",item,configmodel_item_key_name[item].itemname,configmodel_item_key_name[item].defaultValue,defaultvalue);
                     set_condigData_Int(item,defaultvalue);
                 }
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(int):value(%d)", 
-                                get_config_name(item),
-                                get_configData_int(item));
+                // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(int):value(%d)", 
+                //                 get_config_name(item),
+                //                 get_configData_int(item));
                 break;
             case ConfigDataType::DATATYPE_STRING:
 
-                set_condigData_String(item,configmodel_item_key_name[item].defaultValue);
+                    CONFIG_DEBUG("item[%d]%s=%s\n",item,configmodel_item_key_name[item].itemname,configmodel_item_key_name[item].defaultValue);
+                    set_condigData_String(item,configmodel_item_key_name[item].defaultValue);
 
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(string):value(%s)", 
-                                get_config_name(item),
-                                get_configData_string(item).c_str());
+                // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "item(%s):type(string):value(%s)", 
+                //                 get_config_name(item),
+                //                 get_configData_string(item).c_str());
                 break;
             case ConfigDataType::DATATYPE_VECTOR_DOUBLE:
                 /**
@@ -1082,7 +1187,7 @@ namespace OHOS
     {
 
         #ifdef USE_KVSTORE_STORE_CONFIG
-            return ReadKVData_Int(get_config_name(item));
+            return ReadKVData_Int(item,get_config_name(item));
         #else
             return ReadJsonData_Int(GetcJSON(),get_config_name(item));
         #endif
@@ -1090,7 +1195,7 @@ namespace OHOS
     double ConfigModel::get_configData_double(ConfigItem item)
     {
         #ifdef USE_KVSTORE_STORE_CONFIG
-            return ReadKVData_Double(get_config_name(item));
+            return ReadKVData_Double(item,get_config_name(item));
         #else
             return ReadJsonData_Double(GetcJSON(),get_config_name(item));
         #endif
@@ -1099,7 +1204,7 @@ namespace OHOS
     {
 
         #ifdef USE_KVSTORE_STORE_CONFIG
-            return ReadKVData_Bool(get_config_name(item));
+            return ReadKVData_Bool(item,get_config_name(item));
         #else
             return ReadJsonData_Bool(GetcJSON(),get_config_name(item));
         #endif
@@ -1108,7 +1213,7 @@ namespace OHOS
     std::string ConfigModel::get_configData_string(ConfigItem item)
     {
         #ifdef USE_KVSTORE_STORE_CONFIG
-            return ReadKVData_String(get_config_name(item));
+            return ReadKVData_String(item,get_config_name(item));
         #else
             return ReadJsonData_String(GetcJSON(),get_config_name(item));
         #endif