|  | #ifndef AUDIO_PARAM_PARSER_H | 
|  | #define AUDIO_PARAM_PARSER_H | 
|  |  | 
|  | #include <libxml/parser.h> | 
|  | #include <libxml/xmlreader.h> | 
|  | #include <libxml/tree.h> | 
|  |  | 
|  | #ifdef WIN32 | 
|  | #pragma warning( disable : 4996 ) | 
|  | #ifdef __cplusplus | 
|  | #define EXPORT extern "C" __declspec(dllexport) | 
|  | #else | 
|  | #define EXPORT __declspec(dllexport) | 
|  | #endif | 
|  | #else   /* WIN32*/ | 
|  | #define EXPORT | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #include "utstring.h" | 
|  | #include "uthash.h" | 
|  | #include "utlist.h" | 
|  |  | 
|  | #ifndef WIN32 | 
|  | #include <pthread.h> | 
|  | #endif | 
|  |  | 
|  | /* Enable cus xml support */ | 
|  | //#define APP_FORCE_ENABLE_CUS_XML | 
|  |  | 
|  | /* Debugging Macro Definition */ | 
|  | //#define FORCE_DEBUG_LEVEL | 
|  |  | 
|  | #define XML_FOLDER_ON_TUNING_TOOL       ".\\preload_xml\\" | 
|  | #define XML_CUS_FOLDER_ON_TUNING_TOOL   ".\\cus_xml\\" | 
|  | #define XML_FOLDER_ON_DEVICE            "/system/etc/audio_param/" | 
|  | #define XML_CUS_FOLDER_ON_DEVICE        "/home/root/.audio_param/" | 
|  |  | 
|  | #define MAX_AUDIO_TYPE_LEN 50 | 
|  | #define INOTIFY_BUF_SIZE 512 | 
|  |  | 
|  | #define AUDIO_PARAM_XML_POSFIX          "_AudioParam.xml" | 
|  | #define PARAM_UNIT_DESC_XML_POSFIX      "_ParamUnitDesc.xml" | 
|  | #define PARAM_TREE_VIEW_XML_POSFIX      "_ParamTreeView.xml" | 
|  | #define FEATURE_OPTIONS_XML             "AudioParamOptions.xml" | 
|  |  | 
|  | /* XML element definition */ | 
|  | #define ELEM_AUDIO_FEATURE_OPTIONS      "AudioParamOptions" | 
|  | #define ELEM_PARAM                  "Param" | 
|  | #define ELEM_PARAM_UNIT_DESC            "ParamUnitDesc" | 
|  | #define ELEM_CATEGORY_TYPE_LIST         "CategoryTypeList" | 
|  | #define ELEM_CATEGORY_TYPE              "CategoryType" | 
|  | #define ELEM_CATEGORY_GROUP             "CategoryGroup" | 
|  | #define ELEM_CATEGORY                   "Category" | 
|  |  | 
|  | #define ELEM_AUDIO_PARAM                "AudioParam" | 
|  | #define ELEM_PARAM_TREE                 "ParamTree" | 
|  | #define ELEM_PARAM_UNIT_POOL            "ParamUnitPool" | 
|  | #define ELEM_PARAM_UNIT                 "ParamUnit" | 
|  | #define ELEM_PARAM                      "Param" | 
|  | #define ELEM_FIELD                      "Field" | 
|  |  | 
|  | #define ELEM_PARAM_TREE_VIEW            "ParamTreeView" | 
|  | #define ELEM_TREE_ROOT                  "TreeRoot" | 
|  | #define ELEM_SHEET                      "Sheet" | 
|  | #define ELEM_FEATURE                    "Feature" | 
|  | #define ELEM_FIELD_LIST                 "FieldList" | 
|  | #define ELEM_CATEGORY_PATH_LIST         "CategoryPathList" | 
|  |  | 
|  | /* XML attribute definition */ | 
|  | #define ATTRI_NAME                      "name" | 
|  | #define ATTRI_TAB_NAME                  "tab_name" | 
|  | #define ATTRI_VERSION                   "version" | 
|  | #define ATTRI_WORDING                   "wording" | 
|  | #define ATTRI_PARAM_ID                  "param_id" | 
|  | #define ATTRI_PATH                      "path" | 
|  | #define ATTRI_VALUE                     "value" | 
|  | #define ATTRI_TYPE                      "type" | 
|  | #define ATTRI_ARRAY_INDEX               "array_index" | 
|  | #define ATTRI_BIT                       "bit" | 
|  | #define ATTRI_CHECK_LIST                    "check_list" | 
|  | #define ATTRI_ALIAS                     "alias" | 
|  | #define ATTRI_FEATURE_OPTION                "feature_option" | 
|  | #define ATTRI_SWITCH_AUDIO_TYPE         "switch_audio_type" | 
|  | #define ATTRI_SWITCH_PARAM              "switch_param" | 
|  | #define ATTRI_SWITCH_FIELD              "switch_field" | 
|  | #define ATTRI_AUDIO_TYPE                    "audio_type" | 
|  | #define ATTRI_PARAM                     "param" | 
|  | #define ATTRI_VISIBLE                   "visible" | 
|  |  | 
|  | /* DATA_TYPE string */ | 
|  | #define DATA_TYPE_UNKNOWN_STRING        "unknown" | 
|  | #define DATA_TYPE_STR_STRING            "string" | 
|  | #define DATA_TYPE_INT_STRING            "int" | 
|  | #define DATA_TYPE_UINT_STRING           "uint" | 
|  | #define DATA_TYPE_FLOAT_STRING          "float" | 
|  | #define DATA_TYPE_BYTE_ARRAY_STRING     "byte_array" | 
|  | #define DATA_TYPE_UBYTE_ARRAY_STRING    "ubyte_array" | 
|  | #define DATA_TYPE_SHORT_ARRAY_STRING    "short_array" | 
|  | #define DATA_TYPE_USHORT_ARRAY_STRING   "ushort_array" | 
|  | #define DATA_TYPE_INT_ARRAY_STRING      "int_array" | 
|  | #define DATA_TYPE_UINT_ARRAY_STRING     "uint_array" | 
|  | #define DATA_TYPE_DOUBLE_ARRAY_STRING   "double_array" | 
|  | #define DATA_TYPE_FIELD_STRING          "Field" | 
|  |  | 
|  | #define ARRAY_SEPERATOR                 "," | 
|  | #define ARRAY_SEPERATOR_CH              ',' | 
|  | #define PARAM_FIELD_NAME_SEPERATOR      "/" | 
|  |  | 
|  | #define AUDIO_TYPE_FMT_STR(STR_LEN) AUDIO_TYPE_FMT(STR_LEN) | 
|  | #define AUDIO_TYPE_FMT(STR_LEN) "%"#STR_LEN"[^_]" | 
|  |  | 
|  | typedef struct _AppHandle               AppHandle; | 
|  | typedef struct _AudioType               AudioType; | 
|  | typedef struct _FieldInfo               FieldInfo; | 
|  | typedef struct _Category                Category; | 
|  | typedef struct _CategoryAlias           CategoryAlias; | 
|  | typedef struct _CategoryGroup           CategoryGroup; | 
|  | typedef struct _CategoryNameAlias       CategoryNameAlias; | 
|  | typedef struct _CategoryPath            CategoryPath; | 
|  | typedef struct _CategoryType            CategoryType; | 
|  | typedef struct _Feature                 Feature; | 
|  | typedef struct _FeatureField            FeatureField; | 
|  | typedef struct _FeatureOption           FeatureOption; | 
|  | typedef struct _Param                   Param; | 
|  | typedef struct _ParamInfo               ParamInfo; | 
|  | typedef struct _ParamTreeView           ParamTreeView; | 
|  | typedef struct _ParamUnit               ParamUnit; | 
|  | typedef struct _TreeRoot                TreeRoot; | 
|  | typedef struct _NotifyCb                NotifyCb; | 
|  |  | 
|  | typedef void(*NOTIFY_CB_FUN)(AppHandle *appHandle, const char *audioType); | 
|  |  | 
|  | extern int appDebugLevel; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | DEBUG_LEVEL = 0, | 
|  | INFO_LEVEL, | 
|  | WARN_LEVEL, | 
|  | ERR_LEVEL, | 
|  | } MSG_LEVEL; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | APP_ERROR = 0, | 
|  | APP_NO_ERROR = 1, | 
|  | } APP_STATUS; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | PARENT_IS_CATEGORY_GROUP = 0, | 
|  | PARENT_IS_CATEGORY_TYPE = 1, | 
|  | } CATEGORY_PARENT_TYPE; | 
|  |  | 
|  | /* | 
|  | Due to the system/media/camera/include/system/camera_metadata.h declare the same TYPE_FLOAT enum name, | 
|  | If module include the camera_metadata.h and AudioParamParser.h, AudioParamParser change the DATA_TYPE | 
|  | enum decleration to avoid conflict. | 
|  | User could using the APP_TYPE_FLOAT enum instead the TYPE_FLOAT. | 
|  | */ | 
|  | #ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_METADATA_H | 
|  | typedef enum | 
|  | { | 
|  | TYPE_UNKNOWN = -1, | 
|  | TYPE_STR, | 
|  | TYPE_INT, | 
|  | TYPE_UINT, | 
|  | TYPE_FLOAT, | 
|  | TYPE_BYTE_ARRAY, | 
|  | TYPE_UBYTE_ARRAY, | 
|  | TYPE_SHORT_ARRAY, | 
|  | TYPE_USHORT_ARRAY, | 
|  | TYPE_INT_ARRAY, | 
|  | TYPE_UINT_ARRAY, | 
|  | TYPE_DOUBLE_ARRAY, | 
|  | TYPE_FIELD, | 
|  | } DATA_TYPE; | 
|  | #else | 
|  | typedef enum | 
|  | { | 
|  | APP_TYPE_UNKNOWN = -1, | 
|  | APP_TYPE_STR, | 
|  | APP_TYPE_INT, | 
|  | APP_TYPE_UINT, | 
|  | APP_TYPE_FLOAT, | 
|  | APP_TYPE_BYTE_ARRAY, | 
|  | APP_TYPE_UBYTE_ARRAY, | 
|  | APP_TYPE_SHORT_ARRAY, | 
|  | APP_TYPE_USHORT_ARRAY, | 
|  | APP_TYPE_INT_ARRAY, | 
|  | APP_TYPE_UINT_ARRAY, | 
|  | APP_TYPE_DOUBLE_ARRAY, | 
|  | APP_TYPE_FIELD, | 
|  | } DATA_TYPE; | 
|  | #endif | 
|  |  | 
|  | typedef union CategoryParent | 
|  | { | 
|  | Category *category;                 /* Link to parent Category if it's not CategoryGroup */ | 
|  | CategoryType *categoryType;         /* Link to parent CategoryType if it's CategoryGroup */ | 
|  | } CategoryParent; | 
|  |  | 
|  | /* UHash the parameter tree info from ParamTreeView.xml */ | 
|  | struct _CategoryPath | 
|  | { | 
|  | char *path; | 
|  | Feature *feature; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _FeatureField | 
|  | { | 
|  | FieldInfo *fieldInfo; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _Feature | 
|  | { | 
|  | char *name; | 
|  | char *featureOption; | 
|  | FieldInfo *switchFieldInfo; | 
|  | CategoryPath *categoryPathHash; | 
|  | FeatureField *featureFieldHash; | 
|  | AudioType *audioType; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _TreeRoot | 
|  | { | 
|  | char *name;                 /* Key */ | 
|  | FieldInfo *switchFieldInfo; | 
|  | xmlNode *treeRootNode;      /* Used to traversal tree */ | 
|  | Feature *featureHash;       /* Used to opt feature information */ | 
|  | ParamTreeView *paramTreeView;   /* Belong to which paramTreeView */ | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _ParamTreeView | 
|  | { | 
|  | int verMaj; | 
|  | int verMin; | 
|  | AudioType *audioType; | 
|  | TreeRoot *treeRootHash; | 
|  | }; | 
|  |  | 
|  | /* Hash the Param & Field info from ParamUnitDesc.xml */ | 
|  | struct _FieldInfo | 
|  | { | 
|  | char *name;                         /* key */ | 
|  | size_t arrayIndex; | 
|  | int startBit; | 
|  | int endBit; | 
|  | char *checkListStr;                 /* check list string array */ | 
|  | struct _ParamInfo *paramInfo;       /* Link to parent ParamInfo */ | 
|  | UT_hash_handle hh;                  /* hash handle */ | 
|  | }; | 
|  |  | 
|  | struct _ParamInfo | 
|  | { | 
|  | char *name;                         /* key */ | 
|  | DATA_TYPE dataType; | 
|  | struct _FieldInfo *fieldInfoHash; | 
|  | AudioType *audioType;               /* Link to parent AudioType */ | 
|  | UT_hash_handle hh;                  /* hash handle */ | 
|  | }; | 
|  |  | 
|  | /* Hash the param name with value from AudioParam.xml */ | 
|  | struct _Param | 
|  | { | 
|  | char *name;                         /* key */ | 
|  | void *data;                         /* raw data */ | 
|  | size_t arraySize;                       /* Array size if the data is the array pointer */ | 
|  | ParamInfo *paramInfo; | 
|  | struct _ParamUnit *paramUnit;       /* Link to it's ParamUnit */ | 
|  | UT_hash_handle hh;                  /* hash handle */ | 
|  | }; | 
|  |  | 
|  | /* Hash the id with ParamUnit from AudioParam.xml */ | 
|  | struct _ParamUnit | 
|  | { | 
|  | int paramId;                        /* key */ | 
|  | int refCount; | 
|  | AudioType *audioType;               /* Link to it's AudioType */ | 
|  | struct _Param *paramHash;           /* ParamUnit's params */ | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | /* Hash ParamTree info from AudioParam.xml */ | 
|  | typedef struct | 
|  | { | 
|  | char *categoryPath;                 /* key */ | 
|  | int paramId;                        /* Param id */ | 
|  | UT_hash_handle hh; | 
|  | } ParamTree; | 
|  |  | 
|  | struct _Category | 
|  | { | 
|  | char *wording;                      /* key */ | 
|  | char *name; | 
|  | int visible; | 
|  | CategoryParent parent; | 
|  | CATEGORY_PARENT_TYPE parentType; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _CategoryAlias | 
|  | { | 
|  | char *alias;                        /* key */ | 
|  | Category *category; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _CategoryGroup | 
|  | { | 
|  | char *wording;                      /* key */ | 
|  | char *name; | 
|  | int visible; | 
|  | Category *categoryHash;             /* Link to children */ | 
|  | CategoryType *categoryType;         /* Link to parent */ | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _CategoryType | 
|  | { | 
|  | char *wording;                      /* key */ | 
|  | char *name; | 
|  | int visible; | 
|  | CategoryGroup *categoryGroupHash;   /* Link to children */ | 
|  | Category *categoryHash;             /* Link to children */ | 
|  | CategoryAlias *categoryAliasHash;   /* Save category alias information */ | 
|  | AudioType *audioType;               /* Link to parent */ | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _AudioType | 
|  | { | 
|  | char *name; | 
|  | char *tabName; | 
|  | int paramUnitDescVerMaj;            /* ParamUniDesc version */ | 
|  | int paramUnitDescVerMin; | 
|  | int audioParamVerMaj;               /* AudioParam version */ | 
|  | int audioParamVerMin; | 
|  | xmlDocPtr audioParamDoc; | 
|  | xmlDocPtr paramUnitDescDoc; | 
|  | xmlDocPtr paramTreeViewDoc; | 
|  | ParamTree *paramTreeHash; | 
|  | ParamUnit *paramUnitHash; | 
|  | ParamInfo *paramInfoHash; | 
|  | ParamTreeView *paramTreeView; | 
|  | int unusedParamId; | 
|  | int dirty;                          /* Indicate if the audio type modified without saveing*/ | 
|  | int allowReload;                    /* Indicate the audio type can be reload since xml updated */ | 
|  | CategoryType *categoryTypeHash; | 
|  | #ifndef WIN32 | 
|  | pthread_rwlock_t lock; | 
|  | const char *lockCallerFun;          /* Used to cache the lock holder */ | 
|  | #endif | 
|  | AppHandle *appHandle;               /* Link to it's appHandle parent */ | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _FeatureOption | 
|  | { | 
|  | char *name; | 
|  | char *value; | 
|  | UT_hash_handle hh; | 
|  | }; | 
|  |  | 
|  | struct _NotifyCb | 
|  | { | 
|  | NOTIFY_CB_FUN cb; | 
|  | char test[512]; | 
|  | struct _NotifyCb *next, *pre; | 
|  | }; | 
|  |  | 
|  | struct _AppHandle | 
|  | { | 
|  | char *xmlDir; | 
|  | char *xmlCusDir; | 
|  | AudioType *audioTypeHash; | 
|  | FeatureOption *featureOptionsHash; | 
|  | xmlDocPtr featureOptionsDoc; | 
|  | #ifndef WIN32 | 
|  | pthread_t appThread; | 
|  | int appThreadExit; | 
|  | int inotifyFd; | 
|  | pthread_rwlock_t lock; | 
|  | const char *lockCallerFun;          /* Used to cache the lock holder */ | 
|  | #endif | 
|  | NotifyCb *noficyCbList; | 
|  | }; | 
|  |  | 
|  | typedef struct AudioTypeVerInfo{ | 
|  | const char* audioTypeName; | 
|  | int paramUnitDescVerMaj; | 
|  | int paramUnitDescVerMin; | 
|  | int audioParamVerMaj; | 
|  | int audioParamVerMin; | 
|  | } AudioTypeVerInfo; | 
|  |  | 
|  | static const AudioTypeVerInfo audioTypeSupportVerInfo [] = | 
|  | { | 
|  | /* AudioType name, ParamUnitDescVer (maj, min), AudioParamVer (maj, min) */ | 
|  | {"AudioCommonSetting",  1, 0, 1, 0}, | 
|  | {"PlaybackACF",         1, 0, 1, 0}, | 
|  | {"Playback",            1, 0, 1, 0}, | 
|  | {"PlaybackDRC",         1, 0, 1, 0}, | 
|  | {"PlaybackHCF",         1, 0, 1, 0}, | 
|  | {"PlaybackVolAna",      1, 0, 1, 0}, | 
|  | {"PlaybackVolDigi",     1, 0, 1, 0}, | 
|  | {"PlaybackVolUI",       1, 0, 1, 0}, | 
|  | {"Record",              1, 0, 1, 0}, | 
|  | {"RecordDMNR",          1, 0, 1, 0}, | 
|  | {"RecordFIR",           1, 0, 1, 0}, | 
|  | {"RecordUI",            1, 0, 1, 0}, | 
|  | {"RecordVol",           1, 0, 1, 0}, | 
|  | {"RecordVolUI",         1, 0, 1, 0}, | 
|  | {"Speech",              1, 0, 1, 0}, | 
|  | {"SpeechDMNR",          1, 0, 1, 0}, | 
|  | {"SpeechGeneral",       1, 0, 1, 0}, | 
|  | {"SpeechMagiClarity",   1, 0, 1, 0}, | 
|  | {"SpeechUI",            1, 0, 1, 0}, | 
|  | {"SpeechVol",           1, 0, 1, 0}, | 
|  | {"SpeechVolUI",         1, 0, 1, 0}, | 
|  | {"VoIP",                1, 0, 1, 0}, | 
|  | {"VoIPDMNR",            1, 0, 1, 0}, | 
|  | {"VoIPGeneral",         1, 0, 1, 0}, | 
|  | {"VoIPUI",              1, 0, 1, 0}, | 
|  | {"VoIPVol",             1, 0, 1, 0}, | 
|  | {"VoIPVolUI",           1, 0, 1, 0}, | 
|  | {"Volume",              1, 0, 1, 0}, | 
|  | {"VolumeGainMap",       1, 0, 1, 0}, | 
|  | {NULL,                  0, 0, 0, 0} | 
|  | }; | 
|  |  | 
|  | /*********************** | 
|  | * Public API | 
|  | **********************/ | 
|  | EXPORT void             appSetDebugLevel(MSG_LEVEL level); | 
|  | EXPORT MSG_LEVEL        appGetDebugLevel(void); | 
|  |  | 
|  | /* appHandle API */ | 
|  | EXPORT APP_STATUS       appHandleInit(AppHandle *appHandle); | 
|  | EXPORT APP_STATUS       appHandleUninit(AppHandle *appHandle); | 
|  | EXPORT void             appHandleRedirectIOToConsole(void); | 
|  | EXPORT AppHandle       *appHandleGetInstance(void);     /* Never uninit global instance */ | 
|  | EXPORT size_t           appHandleGetNumOfAudioType(AppHandle *appHandle); | 
|  | EXPORT AudioType       *appHandleGetAudioTypeByIndex(AppHandle *appHandle, size_t index); | 
|  | EXPORT AudioType       *appHandleGetAudioTypeByName(AppHandle *appHandle, const char *name); | 
|  | EXPORT const char      *appHandleGetFeatureOptionValue(AppHandle *appHandle, const char *featureOptionName); | 
|  | EXPORT int              appHandleIsFeatureOptionEnabled(AppHandle *appHandle, const char *featureOptionName); | 
|  | EXPORT size_t           appHandleGetNumOfFeatureOption(AppHandle *appHandle); | 
|  | EXPORT FeatureOption   *appHandleGetFeatureOptionByIndex(AppHandle *appHandle, size_t index); | 
|  | EXPORT const char      *appHandleGetBuildTimeStamp(); | 
|  | EXPORT APP_STATUS       appHandleCompressFiles(const char* srcDir, const char* destFile); | 
|  | EXPORT APP_STATUS       appHandleUncompressFile(const char* srcFile, const char* destDir); | 
|  |  | 
|  | /* Following 4 APIs will acquire app handle write lock automatically */ | 
|  | EXPORT APP_STATUS       appHandleParseXml(AppHandle *appHandle, const char *dir, const char *cusDir); | 
|  | EXPORT APP_STATUS       appHandleReloadAudioType(AppHandle *appHandle, const char *audioTypeName); | 
|  | EXPORT void             appHandleRegXmlChangedCb(AppHandle *appHandle, NOTIFY_CB_FUN nofiyCallback); | 
|  | EXPORT void             appHandleUnregXmlChangedCb(AppHandle *appHandle, NOTIFY_CB_FUN nofiyCallback); | 
|  |  | 
|  | /* AudioType API */ | 
|  | EXPORT APP_STATUS       audioTypeIsTuningToolSupportedXmlVer(AudioType *audioType); | 
|  | EXPORT APP_STATUS       audioTypeIsDeviceSupportedXmlVer(AudioType *audioType); | 
|  | EXPORT size_t           audioTypeGetNumOfCategoryType(AudioType *audioType); | 
|  | EXPORT CategoryType    *audioTypeGetCategoryTypeByIndex(AudioType *audioType, size_t idnex); | 
|  | EXPORT CategoryType    *audioTypeGetCategoryTypeByName(AudioType *audioType, const char *categoryTypeName); | 
|  | EXPORT CategoryType    *audioTypeGetCategoryTypeByWording(AudioType *audioType, const char *categoryTypeWording); | 
|  | EXPORT xmlNode         *audioTypeGetCategoryTypeListNode(AudioType *audioType); | 
|  | EXPORT ParamUnit       *audioTypeGetParamUnit(AudioType *audioType, const char *categoryPath); | 
|  | EXPORT size_t           audioTypeGetNumOfParamInfo(AudioType *audioType); | 
|  | EXPORT ParamInfo       *audioTypeGetParamInfoByIndex(AudioType *audioType, size_t index); | 
|  | EXPORT ParamInfo       *audioTypeGetParamInfoByName(AudioType *audioType, const char *paramName); | 
|  | EXPORT APP_STATUS       audioTypeSaveAudioParamXml(AudioType *audioType, const char *saveDir, int clearDirtyBit); | 
|  | EXPORT int              audioTypeReadLock(AudioType *audioType, const char *callerFun); | 
|  | EXPORT int              audioTypeWriteLock(AudioType *audioType, const char *callerFun); | 
|  | EXPORT int              audioTypeUnlock(AudioType *audioType); | 
|  | EXPORT TreeRoot        *audioTypeGetTreeRoot(AudioType *audioType, const char *treeRootName); | 
|  |  | 
|  | /* Following 3 write APIs will acquire write lock automatically */ | 
|  | EXPORT APP_STATUS       audioTypeSetParamData(AudioType *audioType, const char *categoryPath, ParamInfo *paramName, void *dataPtr, int arraySize); | 
|  | EXPORT APP_STATUS       audioTypeSetFieldData(AudioType *audioType, const char *categoryPath, FieldInfo *fieldInfo, unsigned int val); | 
|  | EXPORT APP_STATUS       audioTypeParamUnitCopy(AudioType *audioType, const char *srcCategoryPath, const char *dstCategoryPath); | 
|  |  | 
|  | /* CategoryType API */ | 
|  | EXPORT size_t           categoryTypeGetNumOfCategoryGroup(CategoryType *categoryType); | 
|  | EXPORT CategoryGroup   *categoryTypeGetCategoryGroupByIndex(CategoryType *categoryType, size_t index); | 
|  | EXPORT CategoryGroup   *categoryTypeGetCategoryGroupByWording(CategoryType *categoryType, const char *wording); | 
|  | EXPORT size_t           categoryTypeGetNumOfCategory(CategoryType *categoryType); | 
|  | EXPORT Category        *categoryTypeGetCategoryByIndex(CategoryType *categoryType, size_t index); | 
|  | EXPORT Category        *categoryTypeGetCategoryByWording(CategoryType *categoryType, const char *wording); | 
|  |  | 
|  | /* CategoryGroup API */ | 
|  | EXPORT size_t           categoryGroupGetNumOfCategory(CategoryGroup *categoryGroup); | 
|  | EXPORT Category        *categoryGroupGetCategoryByIndex(CategoryGroup *categoryGroup, size_t index); | 
|  | EXPORT Category        *categoryGroupGetCategoryByWording(CategoryGroup *categoryGroup, const char *index); | 
|  |  | 
|  | /* CategoryAlias API */ | 
|  | EXPORT CategoryAlias   *categoryAliasCreate(const char *alias, Category *category); | 
|  | EXPORT void             categoryAliasRelease(CategoryAlias *categoryAlias); | 
|  |  | 
|  | /* ParamInfo API */ | 
|  | EXPORT size_t           paramInfoGetNumOfFieldInfo(ParamInfo *paramInfo); | 
|  | EXPORT FieldInfo       *paramInfoGetFieldInfoByIndex(ParamInfo *paramInfo, size_t index); | 
|  | EXPORT FieldInfo       *paramInfoGetFieldInfoByName(ParamInfo *paramInfo, const char *fieldName); | 
|  | EXPORT char            *paramNewDataStr(Param *param); | 
|  |  | 
|  | /* ParamUnit API */ | 
|  | EXPORT size_t           paramUnitGetNumOfParam(ParamUnit *paramUnit); | 
|  | EXPORT Param           *paramUnitGetParamByIndex(ParamUnit *paramUnit, size_t index); | 
|  | EXPORT Param           *paramUnitGetParamByName(ParamUnit *paramUnit, const char *paramName); | 
|  | EXPORT ParamInfo       *paramUnitGetParamInfo(ParamUnit *paramUnit, const char *paramInfoName); | 
|  | EXPORT FieldInfo       *paramUnitGetFieldInfo(ParamUnit *paramUnit, const char *paramName, const char *fieldName); | 
|  | EXPORT APP_STATUS       paramUnitGetFieldVal(ParamUnit *paramUnit, const char *paramName, const char *fieldName, unsigned int *val); | 
|  |  | 
|  | /* Param API */ | 
|  | EXPORT size_t           paramGetArraySizeFromString(const char *str); | 
|  | EXPORT APP_STATUS       paramGetFieldVal(Param *param, FieldInfo *fieldInfo, unsigned int *val); | 
|  | EXPORT APP_STATUS       paramSetFieldVal(Param *param, FieldInfo *fieldInfo, unsigned int val); | 
|  | EXPORT DATA_TYPE        paramDataTypeToEnum(const char *dataType); | 
|  | EXPORT const char      *paramDataTypeToStr(DATA_TYPE dataType); | 
|  |  | 
|  | /* Field API */ | 
|  | EXPORT APP_STATUS       fieldInfoGetCheckListValue(FieldInfo *fieldInfo, const char *checkName, unsigned int *checkVal); | 
|  |  | 
|  | /* TreeRoot API */ | 
|  | EXPORT Feature         *treeRootGetFeatureByName(TreeRoot *treeRoot, const char *featureName); | 
|  | EXPORT int              featureIsCategoryPathSupport(Feature *feature, const char *categoryPath); | 
|  |  | 
|  | /* Xml Node related APIs */ | 
|  | EXPORT xmlNode         *findXmlNodeByElemName(xmlNode *node, const char *elemName); | 
|  | EXPORT xmlChar         *xmlNodeGetProp(xmlNode *node, const char *prop); | 
|  | EXPORT xmlChar         *xmlNodeGetWording(xmlNode *node); | 
|  |  | 
|  | /* Utils APIs */ | 
|  | EXPORT APP_STATUS       utilConvDataStringToNative(DATA_TYPE dataType, const char *paramDataStr, void **paramData, size_t *arraySize); | 
|  |  | 
|  | /* Unit test */ | 
|  | EXPORT APP_STATUS       unitTest(AppHandle *appHandle); | 
|  | EXPORT char            *utilGetStdin(char *buf, int bufSize); | 
|  |  | 
|  | /* Following APIs is designed for EM tool integration */ | 
|  | EXPORT APP_STATUS       utilNativeSetField(const char *audioTypeName, const char *categoryPath, const char *paramName, const char *fieldName, const char *fieldValueStr); | 
|  | EXPORT APP_STATUS       utilNativeSetParam(const char *audioTypeName, const char *categoryPath, const char *paramName, const char *paramDataStr); | 
|  | EXPORT char            *utilNativeGetCategory(const char *audioTypeName, const char *categoryTypeName); | 
|  | EXPORT char            *utilNativeGetParam(const char *audioTypeName, const char *categoryPath, const char *paramName); | 
|  | EXPORT unsigned int     utilNativeGetField(const char *audioTypeName, const char *categoryPath, const char *paramName, const char *fieldName); | 
|  | EXPORT APP_STATUS       utilNativeSaveXml(const char *audioTypeName); | 
|  | EXPORT char            *utilNativeGetChecklist(const char *audioTypeName, const char *paramName, const char *fieldName); | 
|  |  | 
|  | #ifndef WIN32 | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif |