/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "APM::ConfigParsingUtils" //#define LOG_NDEBUG 0 #include "ConfigParsingUtils.h" #include namespace android { //static uint32_t ConfigParsingUtils::stringToEnum(const struct StringToEnum *table, size_t size, const char *name) { for (size_t i = 0; i < size; i++) { if (strcmp(table[i].name, name) == 0) { ALOGV("stringToEnum() found %s", table[i].name); return table[i].value; } } return 0; } //static const char *ConfigParsingUtils::enumToString(const struct StringToEnum *table, size_t size, uint32_t value) { for (size_t i = 0; i < size; i++) { if (table[i].value == value) { return table[i].name; } } return ""; } //static bool ConfigParsingUtils::stringToBool(const char *value) { return ((strcasecmp("true", value) == 0) || (strcmp("1", value) == 0)); } // --- audio_policy.conf file parsing //static uint32_t ConfigParsingUtils::parseOutputFlagNames(char *name) { uint32_t flag = 0; // it is OK to cast name to non const here as we are not going to use it after // strtok() modifies it char *flagName = strtok(name, "|"); while (flagName != NULL) { if (strlen(flagName) != 0) { flag |= ConfigParsingUtils::stringToEnum(sOutputFlagNameToEnumTable, ARRAY_SIZE(sOutputFlagNameToEnumTable), flagName); } flagName = strtok(NULL, "|"); } //force direct flag if offload flag is set: offloading implies a direct output stream // and all common behaviors are driven by checking only the direct flag // this should normally be set appropriately in the policy configuration file if ((flag & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) != 0) { flag |= AUDIO_OUTPUT_FLAG_DIRECT; } return flag; } //static uint32_t ConfigParsingUtils::parseInputFlagNames(char *name) { uint32_t flag = 0; // it is OK to cast name to non const here as we are not going to use it after // strtok() modifies it char *flagName = strtok(name, "|"); while (flagName != NULL) { if (strlen(flagName) != 0) { flag |= stringToEnum(sInputFlagNameToEnumTable, ARRAY_SIZE(sInputFlagNameToEnumTable), flagName); } flagName = strtok(NULL, "|"); } return flag; } //static audio_devices_t ConfigParsingUtils::parseDeviceNames(char *name) { uint32_t device = 0; char *devName = strtok(name, "|"); while (devName != NULL) { if (strlen(devName) != 0) { device |= stringToEnum(sDeviceNameToEnumTable, ARRAY_SIZE(sDeviceNameToEnumTable), devName); } devName = strtok(NULL, "|"); } return device; } }; // namespace android