|  | #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; | 
|  | } |