diff options
author | Martijn Coenen <maco@google.com> | 2016-12-01 15:48:42 +0100 |
---|---|---|
committer | Steven Moreland <smoreland@google.com> | 2016-12-02 08:53:18 -0800 |
commit | 99e6bebc96d75d1c9b9b8130cd9b880dacb95b01 (patch) | |
tree | 4265cf9d4b006c5277416fb5fa308a3a4142cc5b /MemoryType.cpp | |
parent | 68fae1a9068bdc91b732548bb2ff95477f6c8071 (diff) | |
download | hidl-99e6bebc96d75d1c9b9b8130cd9b880dacb95b01.tar.gz |
memory -> hidl_memory and pointer -> hidl_pointer
Test: hidl_test
Change-Id: Id71c742867be01e80cd48f689c0c619f6b647aac
Diffstat (limited to 'MemoryType.cpp')
-rw-r--r-- | MemoryType.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/MemoryType.cpp b/MemoryType.cpp new file mode 100644 index 00000000..e85fc874 --- /dev/null +++ b/MemoryType.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2016 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 "MemoryType.h" + +#include <hidl-util/Formatter.h> +#include <android-base/logging.h> + +namespace android { + +MemoryType::MemoryType() {} + +void MemoryType::addNamedTypesToSet(std::set<const FQName> &) const { + // do nothing +} + +std::string MemoryType::getCppType(StorageMode mode, + bool specifyNamespaces) const { + const std::string base = + std::string(specifyNamespaces ? "::android::hardware::" : "") + + "hidl_memory"; + + switch (mode) { + case StorageMode_Stack: + return base; + + case StorageMode_Argument: + return "const " + base + "&"; + + case StorageMode_Result: + return "const " + base + "*"; + } +} + +std::string MemoryType::getVtsType() const { + return "TYPE_MEMORY"; +} + +void MemoryType::emitReaderWriter( + Formatter &out, + const std::string &name, + const std::string &parcelObj, + bool parcelObjIsPointer, + bool isReader, + ErrorMode mode) const { + const std::string parentName = "_hidl_" + name + "_parent"; + out << "size_t " << parentName << ";\n\n"; + + const std::string parcelObjDeref = + parcelObj + (parcelObjIsPointer ? "->" : "."); + + if (isReader) { + out << name + << " = (const ::android::hardware::hidl_memory *)" + << parcelObjDeref + << "readBuffer(" + << "&" + << parentName + << ");\n"; + + out << "if (" + << name + << " == nullptr) {\n"; + + out.indent(); + + out << "_hidl_err = ::android::UNKNOWN_ERROR;\n"; + handleError2(out, mode); + + out.unindent(); + out << "}\n\n"; + } else { + out << "_hidl_err = " + << parcelObjDeref + << "writeBuffer(&" + << name + << ", sizeof(" + << name + << "), &" + << parentName + << ");\n"; + + handleError(out, mode); + } + + emitReaderWriterEmbedded( + out, + 0 /* depth */, + name, + name /* sanitizedName */, + isReader /* nameIsPointer */, + parcelObj, + parcelObjIsPointer, + isReader, + mode, + parentName, + "0 /* parentOffset */"); +} + +void MemoryType::emitReaderWriterEmbedded( + Formatter &out, + size_t /* depth */, + const std::string &name, + const std::string & /*sanitizedName*/, + bool nameIsPointer, + const std::string &parcelObj, + bool parcelObjIsPointer, + bool isReader, + ErrorMode mode, + const std::string &parentName, + const std::string &offsetText) const { + emitReaderWriterEmbeddedForTypeName( + out, + name, + nameIsPointer, + parcelObj, + parcelObjIsPointer, + isReader, + mode, + parentName, + offsetText, + "::android::hardware::hidl_memory", + "" /* childName */, + "::android::hardware"); +} + +bool MemoryType::needsEmbeddedReadWrite() const { + return true; +} + +bool MemoryType::resultNeedsDeref() const { + return true; +} + +bool MemoryType::isJavaCompatible() const { + return false; +} + +void MemoryType::getAlignmentAndSize(size_t *align, size_t *size) const { + *align = *size = 8; +} + +status_t MemoryType::emitVtsTypeDeclarations(Formatter &out) const { + out << "type: " << getVtsType() << "\n"; + return OK; +} + +} // namespace android + |