/* * Copyright (C) 2012 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. */ #include <stdlib.h> #include "Log.h" #include "StringUtil.h" #include "task/TaskAll.h" TaskAsync::TaskAsync(TaskType type) : TaskGeneric(type), mVolume(-1), mDeviceType(EDeviceHost), mMode(AudioHardware::EModeVoice), mAsynchronous(false) { // nothing to do } TaskAsync::~TaskAsync() { } TaskGeneric::ExecutionResult TaskAsync::run() { // id is mandatory if (mId.length() == 0) { LOGE(" TaskAsync::run no id attribute"); return TaskGeneric::EResultError; } TaskGeneric::ExecutionResult result = start(); if (result == TaskGeneric::EResultOK) { if (!isAsynchronous()) { return complete(); } else { if (!getParentSequential()->queueAsyncTask(const_cast<TaskAsync*>(this))) { LOGE("TaskAsync::run queueAsyncTask failed"); return TaskGeneric::EResultError; } } } return result; } bool TaskAsync::parseAttribute(const android::String8& name, const android::String8& value) { bool result = true; if (StringUtil::compare(name, "id") == 0) { mId.append(value); } else if (StringUtil::compare(name, "gain") == 0) { mVolume = atoi(value.string()); if ((mVolume < 1) || (mVolume > 100)) { LOGE("TaskGeneric::parseAttribute gain out of range %d", mVolume); return false; } } else if (StringUtil::compare(name, "sync") == 0) { if (StringUtil::compare(value, "start") == 0) { // async makeAsynchronous(); } } else if (StringUtil::compare(name, "device") == 0) { if (StringUtil::compare(value, "host") == 0) { mDeviceType = EDeviceHost; } else if (StringUtil::compare(value, "DUT") == 0) { mDeviceType = EDeviceDUT; } else { return false; } } else if (StringUtil::compare(name, "mode") == 0) { if (StringUtil::compare(value, "voice") == 0) { mMode = AudioHardware::EModeVoice; } else if (StringUtil::compare(value, "music") == 0) { mMode = AudioHardware::EModeMusic; } else { return false; } } else { result = TaskGeneric::parseAttribute(name, value); } return result; } TaskSequential* TaskAsync::getParentSequential() { ASSERT(getParent()->getType() == TaskGeneric::ETaskSequential); return reinterpret_cast<TaskSequential*>(getParent()); }