| #include "AudioParamParserPriv.h" | 
 |  | 
 | EXPORT size_t paramInfoGetNumOfFieldInfo(ParamInfo *paramInfo) | 
 | { | 
 |     if (!paramInfo) | 
 |     { | 
 |         ERR_LOG("paramInfo is NULL!\n"); | 
 |         return 0; | 
 |     } | 
 |  | 
 |     return HASH_COUNT(paramInfo->fieldInfoHash); | 
 | } | 
 |  | 
 | EXPORT FieldInfo *paramInfoGetFieldInfoByIndex(ParamInfo *paramInfo, size_t index) | 
 | { | 
 |     FieldInfo *fieldInfo = NULL; | 
 |     size_t i = 0; | 
 |  | 
 |     if (!paramInfo) | 
 |     { | 
 |         ERR_LOG("paramInfo is NULL!\n"); | 
 |         return NULL; | 
 |     } | 
 |  | 
 |     for (fieldInfo = paramInfo->fieldInfoHash; fieldInfo ; fieldInfo = fieldInfo->hh.next) | 
 |     { | 
 |         if (index == i++) | 
 |         { | 
 |             return fieldInfo; | 
 |         } | 
 |     } | 
 |  | 
 |     return NULL; | 
 | } | 
 |  | 
 | EXPORT FieldInfo *paramInfoGetFieldInfoByName(ParamInfo *paramInfo, const char *fieldName) | 
 | { | 
 |     FieldInfo *fieldInfo; | 
 |  | 
 |     if (!paramInfo) | 
 |     { | 
 |         ERR_LOG("paramInfo is NULL!\n"); | 
 |         return NULL; | 
 |     } | 
 |  | 
 |     /* Query Param name */ | 
 |     HASH_FIND_STR(paramInfo->fieldInfoHash, fieldName, fieldInfo); | 
 |  | 
 |     return fieldInfo; | 
 | } | 
 |  | 
 | EXPORT ParamInfo *paramInfoCreate(const char *name, DATA_TYPE dataType, AudioType *audioType) | 
 | { | 
 |     ParamInfo *paramInfo = (ParamInfo *)malloc(sizeof(ParamInfo)); | 
 |     paramInfo->audioType = audioType; | 
 |     paramInfo->name = strdup(name); | 
 |     paramInfo->dataType = dataType; | 
 |     paramInfo->fieldInfoHash = NULL; | 
 |     return paramInfo; | 
 | } | 
 |  | 
 | EXPORT FieldInfo *fieldInfoCreate(const char *fieldName, unsigned int arrayIndex, int startBit, int endBit, const char *checkList, ParamInfo *paramInfo) | 
 | { | 
 |     FieldInfo *fieldInfo = (FieldInfo *)malloc(sizeof(FieldInfo)); | 
 |  | 
 |     /* Setup members */ | 
 |     fieldInfo->name = strdup(fieldName); | 
 |     fieldInfo->arrayIndex = arrayIndex; | 
 |     fieldInfo->startBit = startBit; | 
 |     fieldInfo->endBit = endBit; | 
 |     fieldInfo->paramInfo = paramInfo; | 
 |  | 
 |     if (checkList) | 
 |     { | 
 |         fieldInfo->checkListStr = strdup(checkList); | 
 |     } | 
 |     else | 
 |     { | 
 |         fieldInfo->checkListStr = utilGenCheckList(endBit - startBit + 1); | 
 |     } | 
 |  | 
 |     return fieldInfo; | 
 | } | 
 |  | 
 | EXPORT void paramInfoRelease(ParamInfo *paramInfo) | 
 | { | 
 |     if (paramInfo == NULL) | 
 |     { | 
 |         return; | 
 |     } | 
 |  | 
 |     if (paramInfo->fieldInfoHash) | 
 |     { | 
 |         FieldInfo *tmp, *item; | 
 |         HASH_ITER(hh, paramInfo->fieldInfoHash, item, tmp) | 
 |         { | 
 |             HASH_DEL(paramInfo->fieldInfoHash, item); | 
 |             fieldInfoRelease(item); | 
 |         } | 
 |     } | 
 |  | 
 |     free(paramInfo->name); | 
 |     free(paramInfo); | 
 | } | 
 |  | 
 | EXPORT void fieldInfoRelease(FieldInfo *fieldInfo) | 
 | { | 
 |     if (fieldInfo == NULL) | 
 |     { | 
 |         return; | 
 |     } | 
 |  | 
 |     if (fieldInfo->checkListStr) | 
 |     { | 
 |         free(fieldInfo->checkListStr); | 
 |     } | 
 |  | 
 |     free(fieldInfo->name); | 
 |     free(fieldInfo); | 
 | } | 
 |  | 
 | EXPORT APP_STATUS fieldInfoGetCheckListValue(FieldInfo *fieldInfo, const char *checkName, unsigned int *checkVal) | 
 | { | 
 |     char *checkList; | 
 |     char *valStr; | 
 |     char *nameStr; | 
 |     if (!fieldInfo) | 
 |     { | 
 |         ERR_LOG("fieldInfo is NULL\n"); | 
 |         return APP_ERROR; | 
 |     } | 
 |  | 
 |     if (!checkName) | 
 |     { | 
 |         ERR_LOG("checkName is NULL\n"); | 
 |         return APP_ERROR; | 
 |     } | 
 |  | 
 |     if (!checkVal) | 
 |     { | 
 |         ERR_LOG("checkVal is NULL\n"); | 
 |         return APP_ERROR; | 
 |     } | 
 |  | 
 |     checkList = strdup(fieldInfo->checkListStr); | 
 |     valStr = strtok(checkList, ARRAY_SEPERATOR); | 
 |     if (!valStr) | 
 |     { | 
 |         ERR_LOG("Cannot parse valStr\n"); | 
 |         free(checkList); | 
 |         return APP_ERROR; | 
 |     } | 
 |  | 
 |     while ((nameStr = strtok(NULL, ARRAY_SEPERATOR)) != NULL) | 
 |     { | 
 |         if (!strcmp(nameStr, checkName)) | 
 |         { | 
 |             *checkVal = strtoul(valStr, NULL, 0); | 
 |             free(checkList); | 
 |             return APP_NO_ERROR; | 
 |         } | 
 |  | 
 |         valStr = strtok(NULL, ARRAY_SEPERATOR); | 
 |         if (!valStr) | 
 |         { | 
 |             ERR_LOG("Cannot parse valStr\n"); | 
 |             free(checkList); | 
 |             return APP_ERROR; | 
 |         } | 
 |     } | 
 |  | 
 |     free(checkList); | 
 |     return APP_ERROR; | 
 | } |