Home | History | Annotate | Download | only in task
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 #include <stdlib.h>
     18 #include "Log.h"
     19 #include "StringUtil.h"
     20 #include "task/TaskAll.h"
     21 
     22 TaskAsync::TaskAsync(TaskType type)
     23     : TaskGeneric(type),
     24       mVolume(-1),
     25       mDeviceType(EDeviceHost),
     26       mMode(AudioHardware::EModeVoice),
     27       mAsynchronous(false)
     28 {
     29     // nothing to do
     30 }
     31 
     32 TaskAsync::~TaskAsync()
     33 {
     34 
     35 }
     36 
     37 TaskGeneric::ExecutionResult TaskAsync::run()
     38 {
     39     // id is mandatory
     40     if (mId.length() == 0) {
     41         LOGE(" TaskAsync::run no id attribute");
     42         return TaskGeneric::EResultError;
     43     }
     44     TaskGeneric::ExecutionResult result = start();
     45     if (result == TaskGeneric::EResultOK) {
     46         if (!isAsynchronous()) {
     47             return complete();
     48         } else {
     49             if (!getParentSequential()->queueAsyncTask(const_cast<TaskAsync*>(this))) {
     50                 LOGE("TaskAsync::run queueAsyncTask failed");
     51                 return TaskGeneric::EResultError;
     52             }
     53         }
     54     }
     55     return result;
     56 }
     57 
     58 bool TaskAsync::parseAttribute(const android::String8& name, const android::String8& value)
     59 {
     60     bool result = true;
     61     if (StringUtil::compare(name, "id") == 0) {
     62         mId.append(value);
     63     } else if (StringUtil::compare(name, "gain") == 0) {
     64         mVolume = atoi(value.string());
     65         if ((mVolume < 1) || (mVolume > 100)) {
     66             LOGE("TaskGeneric::parseAttribute gain out of range %d", mVolume);
     67             return false;
     68         }
     69     } else if (StringUtil::compare(name, "sync") == 0) {
     70         if (StringUtil::compare(value, "start") == 0) { // async
     71             makeAsynchronous();
     72         }
     73     } else if (StringUtil::compare(name, "device") == 0) {
     74         if (StringUtil::compare(value, "host") == 0) {
     75             mDeviceType = EDeviceHost;
     76         } else if (StringUtil::compare(value, "DUT") == 0) {
     77             mDeviceType = EDeviceDUT;
     78         } else {
     79             return false;
     80         }
     81     } else if (StringUtil::compare(name, "mode") == 0) {
     82             if (StringUtil::compare(value, "voice") == 0) {
     83                 mMode = AudioHardware::EModeVoice;
     84             } else if (StringUtil::compare(value, "music") == 0) {
     85                 mMode = AudioHardware::EModeMusic;
     86             } else {
     87                 return false;
     88             }
     89     } else {
     90         result = TaskGeneric::parseAttribute(name, value);
     91     }
     92     return result;
     93 }
     94 
     95 TaskSequential* TaskAsync::getParentSequential()
     96 {
     97     ASSERT(getParent()->getType() == TaskGeneric::ETaskSequential);
     98     return reinterpret_cast<TaskSequential*>(getParent());
     99 }
    100 
    101