Emx中关于参数配置文件有两个定义,一个是Param(参数),另一个是Config(配置),两者都是保存在flash中的某些json文件(Emx中统一使用json来存储参数和配置文件),但是他们有一些区别。
| Param | Config |
| 加密 | 不加密 |
| 可动态修改 | 静态的通常不进行修改 |
| 通过ParamServer提供的接口远程读写 | 通过SysEnv获取到路径后直接读取文件 |
实际开发中需要注意他们各自的特性,例如某些敏感信息,需要加密存储,那么就需要使用Param,如果是一些不敏感的信息,也不会去修改它,那么Config更合适,也便于日常调试的时候查看其内容。Config的读写可以使用Core中的Utils模块中的SysEnv结合EasyJson::Load来读取。下面来重点说一下Param,Param模块包含一个ParamServer,ParamServer是EmxCoreServer的一个线程,启动后会在后台运行,负责实现参数的读写等实际操作,使用者通过libEmxCore.so来调用ParamServer的服务。Emx中使用的所有的param都是由EmxCoreServer中的ParamServer服务进行统一加解密读写处理的
ParamServer集成在EmxCoreServer中,其配置文件也是在EmxCoreServer启动的时候传入,配置文件的内容和含义参看1.EmxCore中的core.json解析
实际使用中可以直接调用Param来进行参数的读写,也可以继承Param后再进行读写
Param param("mac");
Json::Value json;
if (param.Get(json) != ErrCodeE::Success) {
emxloge("load mac failed\n");
return ErrCodeE::Failure;
}
printf("%s\n",json["mac"].asCString());
return ErrCodeE::Success;
}
Param param("mac");
Json::Value json;
if (param.Get(json) != ErrCodeE::Success) {
emxloge("load mac failed\n");
return ErrCodeE::Failure;
}
json["mac"] = mac;
if (param.Set(json) != ErrCodeE::Success) {
emxloge("save mac failed\n");
return ErrCodeE::Failure;
}
return ErrCodeE::Success;
}
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
class Mac:public Param {
public:
Mac():Param("mac"){}
Json::Value json;
if (Get(json) != ErrCodeE::Success) {
emxloge("load mac failed\n");
return ErrCodeE::Failure;
}
printf("%s\n",json["mac"].asCString());
return ErrCodeE::Success;
}
Json::Value json;
if (Get(json) != ErrCodeE::Success) {
emxloge("load mac failed\n");
return ErrCodeE::Failure;
}
json["mac"] = mac;
if (Set(json) != ErrCodeE::Success) {
emxloge("save mac failed\n");
return ErrCodeE::Failure;
}
return ErrCodeE::Success;
}
}
当设备需要恢复出厂配置时,可以通过Param提供的ResetAllToFactory接口实现,ParamServer会删除core.json中param.normal和param.backup指定目录下的参数文件,从而将所有的param恢复默认值,也就是param.default目录中的值,当某些参数文件不需要在这个时候被重置时,可以通过修改resetReserved.json参数文件实现,这个文件内部记录了在ResetAllToFactory过程中哪些参数文件会被忽略