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