5#ifndef NSUKIT_JSON_ICD_WRAPPER_H
6#define NSUKIT_JSON_ICD_WRAPPER_H
19 bool InitICD(std::string_view path);
66 res->bytes =
new char[size + 1]();
68 memcpy(res->bytes, &value, size);
76 if (!
icdParams->isMember(param_name))
return nsukitStatus_t::NSUKIT_STATUS_INVALID_VALUE;
77 param = &(*icdParams)[param_name];
78 (*param)[1] = Json::Value(value);
79 return nsukitStatus_t::NSUKIT_STATUS_SUCCESS;
85 Json::Value reg, value;
88 throw std::runtime_error(
"此参数不存在");
90 reg = (*icdParams)[param_name];
94 _value = (T) std::stoll(value.asString(),
nullptr, 16);
95 }
else if (value.isString() &&
StringStartWith(value.asString(),
"0b")) {
96 _value = (T) std::stoll(value.asString().substr(2),
nullptr, 2);
97 }
else if (value.isString() && reg[0].asString() ==
ICD_File && std::is_base_of<T, std::string>::value) {
98 _value = get_icd_param<T>(param_name);
99 }
else if (value.isNumeric()) {
100 std::string value_type = reg[0].asString();
102 _value = (T) value.asFloat();
104 _value = (T) value.asDouble();
106 _value = (T) value.asUInt();
107 }
else if (value_type ==
ICD_Int8) {
108 _value = (T) value.asInt();
110 _value = (T) value.asUInt();
112 _value = (T) value.asInt();
114 _value = (T) value.asUInt();
116 _value = (T) value.asInt();
118 std::cout <<
"未识别的值类型 " << value.toStyledString() << std::endl;
119 throw std::runtime_error(
"未识别的寄存器值类型");
122 std::cout <<
"未识别的值类型 " << value.toStyledString() << std::endl;
123 throw std::runtime_error(
"未识别的寄存器值类型");
134 inline std::string JsonWrapper::get_icd_param<std::string>(
nsuCSParam_t ¶m_name) {
135 if (!icdParams->isMember(param_name))
return "";
136 return (*icdParams)[param_name][1].asString();
CommandPack * FmtFile(const std::string &file_path, bool need_size=false)
Json::Value * icdCommands
CommandPack * FmtRegister(const Json::Value ®, const T &value)
nsukitStatus_t set_icd_param(nsuCSParam_t ¶m_name, const T &value)
T get_icd_param(nsuCSParam_t ¶m_name)
bool InitICD(std::string_view path)
static std::map< std::string, int > TypeSizeMap
NSU_DLLEXPORT bool StringStartWith(const std::string &str, const std::string &head)
DLLEXTERN typedef std::string nsuCSParam_t