| /* |
| * 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()); |
| } |
| |