1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of 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, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H 18 #define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H 19 20 #include <aidl/android/hardware/neuralnetworks/BufferDesc.h> 21 #include <aidl/android/hardware/neuralnetworks/BufferRole.h> 22 #include <aidl/android/hardware/neuralnetworks/Capabilities.h> 23 #include <aidl/android/hardware/neuralnetworks/DataLocation.h> 24 #include <aidl/android/hardware/neuralnetworks/DeviceType.h> 25 #include <aidl/android/hardware/neuralnetworks/ErrorStatus.h> 26 #include <aidl/android/hardware/neuralnetworks/ExecutionPreference.h> 27 #include <aidl/android/hardware/neuralnetworks/Extension.h> 28 #include <aidl/android/hardware/neuralnetworks/ExtensionNameAndPrefix.h> 29 #include <aidl/android/hardware/neuralnetworks/ExtensionOperandTypeInformation.h> 30 #include <aidl/android/hardware/neuralnetworks/IDevice.h> 31 #include <aidl/android/hardware/neuralnetworks/Memory.h> 32 #include <aidl/android/hardware/neuralnetworks/Model.h> 33 #include <aidl/android/hardware/neuralnetworks/Operand.h> 34 #include <aidl/android/hardware/neuralnetworks/OperandExtraParams.h> 35 #include <aidl/android/hardware/neuralnetworks/OperandLifeTime.h> 36 #include <aidl/android/hardware/neuralnetworks/OperandPerformance.h> 37 #include <aidl/android/hardware/neuralnetworks/OperandType.h> 38 #include <aidl/android/hardware/neuralnetworks/Operation.h> 39 #include <aidl/android/hardware/neuralnetworks/OperationType.h> 40 #include <aidl/android/hardware/neuralnetworks/OutputShape.h> 41 #include <aidl/android/hardware/neuralnetworks/PerformanceInfo.h> 42 #include <aidl/android/hardware/neuralnetworks/Priority.h> 43 #include <aidl/android/hardware/neuralnetworks/Request.h> 44 #include <aidl/android/hardware/neuralnetworks/RequestArgument.h> 45 #include <aidl/android/hardware/neuralnetworks/RequestMemoryPool.h> 46 #include <aidl/android/hardware/neuralnetworks/Subgraph.h> 47 #include <aidl/android/hardware/neuralnetworks/SymmPerChannelQuantParams.h> 48 #include <aidl/android/hardware/neuralnetworks/Timing.h> 49 50 #ifdef NN_AIDL_V4_OR_ABOVE 51 #include <aidl/android/hardware/neuralnetworks/TokenValuePair.h> 52 #endif // NN_AIDL_V4_OR_ABOVE 53 54 #include <android/binder_auto_utils.h> 55 #include <nnapi/Result.h> 56 #include <nnapi/Types.h> 57 #include <nnapi/hal/CommonUtils.h> 58 59 #include <vector> 60 61 namespace android::nn { 62 63 GeneralResult<OperandType> unvalidatedConvert(const aidl_hal::OperandType& operandType); 64 GeneralResult<OperationType> unvalidatedConvert(const aidl_hal::OperationType& operationType); 65 GeneralResult<DeviceType> unvalidatedConvert(const aidl_hal::DeviceType& deviceType); 66 GeneralResult<Priority> unvalidatedConvert(const aidl_hal::Priority& priority); 67 GeneralResult<Capabilities> unvalidatedConvert(const aidl_hal::Capabilities& capabilities); 68 GeneralResult<Capabilities::OperandPerformance> unvalidatedConvert( 69 const aidl_hal::OperandPerformance& operandPerformance); 70 GeneralResult<Capabilities::PerformanceInfo> unvalidatedConvert( 71 const aidl_hal::PerformanceInfo& performanceInfo); 72 GeneralResult<DataLocation> unvalidatedConvert(const aidl_hal::DataLocation& location); 73 GeneralResult<Operand> unvalidatedConvert(const aidl_hal::Operand& operand); 74 GeneralResult<Operand::ExtraParams> unvalidatedConvert( 75 const std::optional<aidl_hal::OperandExtraParams>& optionalExtraParams); 76 GeneralResult<Operand::LifeTime> unvalidatedConvert( 77 const aidl_hal::OperandLifeTime& operandLifeTime); 78 GeneralResult<Operand::SymmPerChannelQuantParams> unvalidatedConvert( 79 const aidl_hal::SymmPerChannelQuantParams& symmPerChannelQuantParams); 80 GeneralResult<Operation> unvalidatedConvert(const aidl_hal::Operation& operation); 81 GeneralResult<Model> unvalidatedConvert(const aidl_hal::Model& model); 82 GeneralResult<ExtensionNameAndPrefix> unvalidatedConvert( 83 const aidl_hal::ExtensionNameAndPrefix& extensionNameAndPrefix); 84 GeneralResult<Model::OperandValues> unvalidatedConvert(const std::vector<uint8_t>& operandValues); 85 GeneralResult<Model::Subgraph> unvalidatedConvert(const aidl_hal::Subgraph& subgraph); 86 GeneralResult<OutputShape> unvalidatedConvert(const aidl_hal::OutputShape& outputShape); 87 GeneralResult<MeasureTiming> unvalidatedConvert(bool measureTiming); 88 GeneralResult<SharedMemory> unvalidatedConvert(const aidl_hal::Memory& memory); 89 GeneralResult<Timing> unvalidatedConvert(const aidl_hal::Timing& timing); 90 GeneralResult<BufferDesc> unvalidatedConvert(const aidl_hal::BufferDesc& bufferDesc); 91 GeneralResult<BufferRole> unvalidatedConvert(const aidl_hal::BufferRole& bufferRole); 92 GeneralResult<Request> unvalidatedConvert(const aidl_hal::Request& request); 93 GeneralResult<Request::Argument> unvalidatedConvert( 94 const aidl_hal::RequestArgument& requestArgument); 95 GeneralResult<Request::MemoryPool> unvalidatedConvert( 96 const aidl_hal::RequestMemoryPool& memoryPool); 97 GeneralResult<ErrorStatus> unvalidatedConvert(const aidl_hal::ErrorStatus& errorStatus); 98 GeneralResult<ExecutionPreference> unvalidatedConvert( 99 const aidl_hal::ExecutionPreference& executionPreference); 100 GeneralResult<Extension> unvalidatedConvert(const aidl_hal::Extension& extension); 101 GeneralResult<Extension::OperandTypeInformation> unvalidatedConvert( 102 const aidl_hal::ExtensionOperandTypeInformation& operandTypeInformation); 103 GeneralResult<SharedHandle> unvalidatedConvert(const ndk::ScopedFileDescriptor& handle); 104 105 #ifdef NN_AIDL_V4_OR_ABOVE 106 GeneralResult<TokenValuePair> unvalidatedConvert(const aidl_hal::TokenValuePair& tokenValuePair); 107 #endif // NN_AIDL_V4_OR_ABOVE 108 109 GeneralResult<std::vector<Operation>> unvalidatedConvert( 110 const std::vector<aidl_hal::Operation>& operations); 111 112 GeneralResult<Capabilities> convert(const aidl_hal::Capabilities& capabilities); 113 GeneralResult<DeviceType> convert(const aidl_hal::DeviceType& deviceType); 114 GeneralResult<ErrorStatus> convert(const aidl_hal::ErrorStatus& errorStatus); 115 GeneralResult<ExecutionPreference> convert( 116 const aidl_hal::ExecutionPreference& executionPreference); 117 GeneralResult<SharedMemory> convert(const aidl_hal::Memory& memory); 118 GeneralResult<Model> convert(const aidl_hal::Model& model); 119 GeneralResult<OperandType> convert(const aidl_hal::OperandType& operandType); 120 GeneralResult<Priority> convert(const aidl_hal::Priority& priority); 121 GeneralResult<Request> convert(const aidl_hal::Request& request); 122 GeneralResult<Timing> convert(const aidl_hal::Timing& timing); 123 GeneralResult<SharedHandle> convert(const ndk::ScopedFileDescriptor& handle); 124 GeneralResult<BufferDesc> convert(const aidl_hal::BufferDesc& bufferDesc); 125 126 GeneralResult<std::vector<Extension>> convert(const std::vector<aidl_hal::Extension>& extension); 127 GeneralResult<std::vector<SharedMemory>> convert(const std::vector<aidl_hal::Memory>& memories); 128 GeneralResult<std::vector<ExtensionNameAndPrefix>> convert( 129 const std::vector<aidl_hal::ExtensionNameAndPrefix>& extensionNameAndPrefix); 130 131 #ifdef NN_AIDL_V4_OR_ABOVE 132 GeneralResult<std::vector<TokenValuePair>> convert( 133 const std::vector<aidl_hal::TokenValuePair>& metaData); 134 #endif // NN_AIDL_V4_OR_ABOVE 135 136 GeneralResult<std::vector<OutputShape>> convert( 137 const std::vector<aidl_hal::OutputShape>& outputShapes); 138 GeneralResult<std::vector<SharedHandle>> convert( 139 const std::vector<ndk::ScopedFileDescriptor>& handles); 140 GeneralResult<std::vector<BufferRole>> convert(const std::vector<aidl_hal::BufferRole>& roles); 141 142 GeneralResult<std::vector<uint32_t>> toUnsigned(const std::vector<int32_t>& vec); 143 144 } // namespace android::nn 145 146 namespace aidl::android::hardware::neuralnetworks::utils { 147 148 namespace nn = ::android::nn; 149 150 nn::GeneralResult<std::vector<uint8_t>> unvalidatedConvert(const nn::CacheToken& cacheToken); 151 nn::GeneralResult<BufferDesc> unvalidatedConvert(const nn::BufferDesc& bufferDesc); 152 nn::GeneralResult<BufferRole> unvalidatedConvert(const nn::BufferRole& bufferRole); 153 nn::GeneralResult<DeviceType> unvalidatedConvert(const nn::DeviceType& deviceType); 154 nn::GeneralResult<bool> unvalidatedConvert(const nn::MeasureTiming& measureTiming); 155 nn::GeneralResult<Memory> unvalidatedConvert(const nn::SharedMemory& memory); 156 nn::GeneralResult<OutputShape> unvalidatedConvert(const nn::OutputShape& outputShape); 157 nn::GeneralResult<ErrorStatus> unvalidatedConvert(const nn::ErrorStatus& errorStatus); 158 nn::GeneralResult<ExecutionPreference> unvalidatedConvert( 159 const nn::ExecutionPreference& executionPreference); 160 nn::GeneralResult<OperandType> unvalidatedConvert(const nn::OperandType& operandType); 161 nn::GeneralResult<OperandLifeTime> unvalidatedConvert(const nn::Operand::LifeTime& operandLifeTime); 162 nn::GeneralResult<DataLocation> unvalidatedConvert(const nn::DataLocation& location); 163 nn::GeneralResult<std::optional<OperandExtraParams>> unvalidatedConvert( 164 const nn::Operand::ExtraParams& extraParams); 165 nn::GeneralResult<Operand> unvalidatedConvert(const nn::Operand& operand); 166 nn::GeneralResult<OperationType> unvalidatedConvert(const nn::OperationType& operationType); 167 nn::GeneralResult<Operation> unvalidatedConvert(const nn::Operation& operation); 168 nn::GeneralResult<Subgraph> unvalidatedConvert(const nn::Model::Subgraph& subgraph); 169 nn::GeneralResult<std::vector<uint8_t>> unvalidatedConvert( 170 const nn::Model::OperandValues& operandValues); 171 nn::GeneralResult<ExtensionNameAndPrefix> unvalidatedConvert( 172 const nn::ExtensionNameAndPrefix& extensionNameToPrefix); 173 nn::GeneralResult<Model> unvalidatedConvert(const nn::Model& model); 174 nn::GeneralResult<Priority> unvalidatedConvert(const nn::Priority& priority); 175 nn::GeneralResult<Request> unvalidatedConvert(const nn::Request& request); 176 nn::GeneralResult<RequestArgument> unvalidatedConvert(const nn::Request::Argument& requestArgument); 177 nn::GeneralResult<RequestMemoryPool> unvalidatedConvert(const nn::Request::MemoryPool& memoryPool); 178 nn::GeneralResult<Timing> unvalidatedConvert(const nn::Timing& timing); 179 nn::GeneralResult<int64_t> unvalidatedConvert(const nn::OptionalDuration& optionalDuration); 180 nn::GeneralResult<int64_t> unvalidatedConvert(const nn::OptionalTimePoint& optionalTimePoint); 181 nn::GeneralResult<ndk::ScopedFileDescriptor> unvalidatedConvert(const nn::SyncFence& syncFence); 182 nn::GeneralResult<ndk::ScopedFileDescriptor> unvalidatedConvert(const nn::SharedHandle& handle); 183 nn::GeneralResult<Capabilities> unvalidatedConvert(const nn::Capabilities& capabilities); 184 nn::GeneralResult<Extension> unvalidatedConvert(const nn::Extension& extension); 185 186 #ifdef NN_AIDL_V4_OR_ABOVE 187 nn::GeneralResult<TokenValuePair> unvalidatedConvert(const nn::TokenValuePair& tokenValuePair); 188 #endif // NN_AIDL_V4_OR_ABOVE 189 190 nn::GeneralResult<std::vector<uint8_t>> convert(const nn::CacheToken& cacheToken); 191 nn::GeneralResult<BufferDesc> convert(const nn::BufferDesc& bufferDesc); 192 nn::GeneralResult<DeviceType> convert(const nn::DeviceType& deviceType); 193 nn::GeneralResult<bool> convert(const nn::MeasureTiming& measureTiming); 194 nn::GeneralResult<Memory> convert(const nn::SharedMemory& memory); 195 nn::GeneralResult<ErrorStatus> convert(const nn::ErrorStatus& errorStatus); 196 nn::GeneralResult<ExecutionPreference> convert(const nn::ExecutionPreference& executionPreference); 197 nn::GeneralResult<Model> convert(const nn::Model& model); 198 nn::GeneralResult<Priority> convert(const nn::Priority& priority); 199 nn::GeneralResult<Request> convert(const nn::Request& request); 200 nn::GeneralResult<Timing> convert(const nn::Timing& timing); 201 nn::GeneralResult<int64_t> convert(const nn::OptionalDuration& optionalDuration); 202 nn::GeneralResult<int64_t> convert(const nn::OptionalTimePoint& optionalTimePoint); 203 nn::GeneralResult<Capabilities> convert(const nn::Capabilities& capabilities); 204 nn::GeneralResult<Extension> convert(const nn::Extension& extension); 205 206 nn::GeneralResult<std::vector<BufferRole>> convert(const std::vector<nn::BufferRole>& bufferRoles); 207 nn::GeneralResult<std::vector<OutputShape>> convert( 208 const std::vector<nn::OutputShape>& outputShapes); 209 nn::GeneralResult<std::vector<ndk::ScopedFileDescriptor>> convert( 210 const std::vector<nn::SharedHandle>& handles); 211 nn::GeneralResult<std::vector<ndk::ScopedFileDescriptor>> convert( 212 const std::vector<nn::SyncFence>& syncFences); 213 nn::GeneralResult<std::vector<Extension>> convert(const std::vector<nn::Extension>& extensions); 214 nn::GeneralResult<std::vector<ExtensionNameAndPrefix>> convert( 215 const std::vector<nn::ExtensionNameAndPrefix>& extensionNameToPrefix); 216 217 #ifdef NN_AIDL_V4_OR_ABOVE 218 nn::GeneralResult<std::vector<TokenValuePair>> convert( 219 const std::vector<nn::TokenValuePair>& metaData); 220 #endif // NN_AIDL_V4_OR_ABOVE 221 222 nn::GeneralResult<std::vector<int32_t>> toSigned(const std::vector<uint32_t>& vec); 223 std::vector<uint8_t> toVec(const std::array<uint8_t, IDevice::BYTE_SIZE_OF_CACHE_TOKEN>& token); 224 225 } // namespace aidl::android::hardware::neuralnetworks::utils 226 227 #endif // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_CONVERSIONS_H 228