1ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet/* 2ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * Copyright (C) 2017 The Android Open Source Project 3ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * 4ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * Licensed under the Apache License, Version 2.0 (the "License"); 5ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * you may not use this file except in compliance with the License. 6ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * You may obtain a copy of the License at 7ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * 8ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * http://www.apache.org/licenses/LICENSE-2.0 9ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * 10ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * Unless required by applicable law or agreed to in writing, software 11ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * distributed under the License is distributed on an "AS IS" BASIS, 12ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * See the License for the specific language governing permissions and 14ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet * limitations under the License. 15ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet */ 16ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 17ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#define LOG_TAG "SampleDriverAll" 18ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 19ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include "SampleDriver.h" 20ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 21ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include "HalInterfaces.h" 22ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include "Utils.h" 23ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 24ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include <android-base/logging.h> 25ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include <hidl/LegacySupport.h> 26ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet#include <thread> 27ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 28ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletnamespace android { 29ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletnamespace nn { 30ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletnamespace sample_driver { 31ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 32ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletclass SampleDriverAll : public SampleDriver { 33ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletpublic: 34ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet SampleDriverAll() : SampleDriver("sample-all") {} 35ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet Return<void> getCapabilities(getCapabilities_cb _hidl_cb) override; 36ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet Return<void> getSupportedOperations(const Model& model, getSupportedOperations_cb cb) override; 37ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet}; 38ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 39ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc BrouilletReturn<void> SampleDriverAll::getCapabilities(getCapabilities_cb cb) { 40a116e12f3a150b3dfc6afa91b0997e551490a9f8Jean-Luc Brouillet android::nn::initVLogMask(); 41820215d28bed6c90f696cde0f282445d16da432eMiao Wang VLOG(DRIVER) << "getCapabilities()"; 42ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet Capabilities capabilities = {.float32Performance = {.execTime = 1.1f, .powerUsage = 1.1f}, 43ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet .quantized8Performance = {.execTime = 1.1f, .powerUsage = 1.1f}}; 44ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet cb(ErrorStatus::NONE, capabilities); 45ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet return Void(); 46ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} 47ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 48ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc BrouilletReturn<void> SampleDriverAll::getSupportedOperations(const Model& model, 49ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet getSupportedOperations_cb cb) { 50820215d28bed6c90f696cde0f282445d16da432eMiao Wang VLOG(DRIVER) << "getSupportedOperations()"; 51ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet if (validateModel(model)) { 52ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet const size_t count = model.operations.size(); 53ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet std::vector<bool> supported(count, true); 54ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet cb(ErrorStatus::NONE, supported); 55ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet } else { 56ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet std::vector<bool> supported; 57ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet cb(ErrorStatus::INVALID_ARGUMENT, supported); 58ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet } 59ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet return Void(); 60ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} 61ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 62ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} // namespace sample_driver 63ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} // namespace nn 64ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} // namespace android 65ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 66ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletusing android::nn::sample_driver::SampleDriverAll; 67ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletusing android::sp; 68ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet 69ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouilletint main() { 70ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet sp<SampleDriverAll> driver(new SampleDriverAll()); 71ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet return driver->run(); 72ef22aa5727b96e9a0863ef71cfbe3dbdac339408Jean-Luc Brouillet} 73