- typedef struct
- {
- uint16_t usValue;
- uint8_t ucValue;
- uint32_t uiValue;
- float fValue;
- char szString_1[12];
- double dValue;
- int16_t sValue;
- int8_t cValue;
- int32_t iValue;
- char szString_2[10];
- }ParamDemo_t;
- ParamDemo_t g_tTestVal = {
- .usValue = 20,
- .ucValue = 10,
- .uiValue = 1000,
- .fValue = 3.14,
- .szString_1 = "abcd",
- .dValue = 5.12,
- .sValue = -100,
- .cValue = -2,
- .iValue = 300,
- .szString_2 = "12234",
- };
- int8_t g_cTest = 50;
- char g_szString[10] = "qwer";
- static int CheckSValue(const void *pCurParam);
- cotParamInfo_t sg_ParamTable[] = {
- COT_PARAM_ITEM_BIND(1, g_tTestVal.usValue, COT_PARAM_UINT16, COT_PARAM_ATTR_WR),
- COT_PARAM_ITEM_BIND(2, g_tTestVal.ucValue, COT_PARAM_UINT8, COT_PARAM_ATTR_WR, 20),
- COT_PARAM_ITEM_BIND(3, g_tTestVal.uiValue, COT_PARAM_UINT32, COT_PARAM_ATTR_WR, 1000, 1000, 10000),
- COT_PARAM_ITEM_BIND(4, g_tTestVal.fValue, COT_PARAM_FLOAT, COT_PARAM_ATTR_WR, 10, -10.5, 10.5),
- COT_PARAM_ITEM_BIND(5, g_tTestVal.szString_1, COT_PARAM_STRING, COT_PARAM_ATTR_WR, "abcd", 3, sizeof(g_tTestVal.szString_1)),
- COT_PARAM_ITEM_BIND(6, g_tTestVal.dValue, COT_PARAM_DOUBLE, COT_PARAM_ATTR_WR, 0, -90.10, 100.10),
- COT_PARAM_ITEM_BIND(7, g_tTestVal.sValue, COT_PARAM_INT16, COT_PARAM_ATTR_WR, 100, -200, 200, CheckSValue), // 添加自定义校验
- COT_PARAM_ITEM_BIND_WITH_NAME(8, "g_cTest", g_cTest, COT_PARAM_INT8, COT_PARAM_ATTR_WR, 50, -100, 100), // 另取参数名
- COT_PARAM_ITEM_BIND(9, g_szString, COT_PARAM_STRING, COT_PARAM_ATTR_WR, "XXX", 3, 6),
- };
- static int CheckSValue(const void *pCurParam)
- {
- const int16_t *p_sValue = (const int16_t *)pCurParam;
- if ((*p_sValue) % 2 != 0)
- {
- return -1;
- }
- return 0;
- }
- int main()
- {
- cotParam_Init(&sg_tParamManager, sg_ParamTable, COT_PARAM_TABLE_SIZE(sg_ParamTable));
- // 对某个变量当前参数进行范围校验,得到校验结果后自行处理
- cotParam_SingleParamSelfCheck(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &eCheckResult);
- if (eCheckResult != COT_PARAM_CHECK_OK) // 修改后检查
- {
- cotParam_SingleParamResetDefValue(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3)); // 如果校验失败,则恢复为默认值
- }
- // 对某个变量参数变更后(当前值已经变化)进行校验处理,若超出范围则恢复默认
- g_test_3 = 1000;
- cotParam_SingleParamCheckProcess(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), COT_PARAM_RESET_DEF);
- // 对某个变量参数在需要变更前(当前值没有变化)进行校验处理,得到校验结果后自行处理
- double tmp = 1000;
- cotParam_SingleParamCheckInput(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &tmp, &eCheckResult);
- if (eCheckResult == COT_PARAM_CHECK_OK)
- {
- g_test_3 = tmp;// 如果校验成功,则修改
- }
- // 对某个变量参数在需要变更前(当前值没有变化)进行校验处理,若新的值超出范围则不更新变量参数当前的值
- double tmp = 1000;
- cotParam_SingleParamUpdate(cotParam_FindParamByParamPtr(&sg_tParamManager, &g_test_3), &tmp, COT_PARAM_RESET_NONE)
- }