| /* |
| * 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. |
| */ |
| |
| #ifndef ANDROID_OS_HW_BLOB_H |
| #define ANDROID_OS_HW_BLOB_H |
| |
| #include <android-base/macros.h> |
| #include <jni.h> |
| #include <hidl/HidlSupport.h> |
| #include <hwbinder/Parcel.h> |
| #include <utils/RefBase.h> |
| #include <utils/Vector.h> |
| |
| namespace android { |
| |
| struct JHwBlob : public RefBase { |
| enum class BlobType { |
| GENERIC, |
| NATIVE_HANDLE, |
| }; |
| |
| static void InitClass(JNIEnv *env); |
| |
| static sp<JHwBlob> SetNativeContext( |
| JNIEnv *env, jobject thiz, const sp<JHwBlob> &context); |
| |
| static sp<JHwBlob> GetNativeContext(JNIEnv *env, jobject thiz); |
| |
| static jobject NewObject(JNIEnv *env, const void *ptr, size_t handle); |
| static jobject NewObject(JNIEnv *env, size_t size); |
| |
| JHwBlob(JNIEnv *env, jobject thiz, size_t size); |
| |
| void setTo(const void *ptr, size_t handle); |
| |
| status_t getHandle(size_t *handle) const; |
| |
| status_t read(size_t offset, void *data, size_t size) const; |
| status_t write(size_t offset, const void *data, size_t size); |
| |
| status_t getString( |
| size_t offset, const android::hardware::hidl_string **s) const; |
| |
| const void *data() const; |
| void *data(); |
| |
| size_t size() const; |
| |
| void specializeBlobTo(BlobType type); |
| BlobType type() const; |
| |
| status_t putBlob(size_t offset, const sp<JHwBlob> &blob); |
| |
| status_t writeToParcel(hardware::Parcel *parcel) const; |
| |
| status_t writeEmbeddedToParcel( |
| hardware::Parcel *parcel, |
| size_t parentHandle, |
| size_t parentOffset) const; |
| |
| protected: |
| virtual ~JHwBlob(); |
| |
| private: |
| struct BlobInfo { |
| size_t mOffset; |
| sp<JHwBlob> mBlob; |
| }; |
| |
| void *mBuffer; |
| size_t mSize; |
| BlobType mType; |
| bool mOwnsBuffer; |
| |
| size_t mHandle; |
| |
| Vector<BlobInfo> mSubBlobs; |
| |
| status_t writeSubBlobsToParcel(hardware::Parcel *parcel, size_t parentHandle) const; |
| |
| DISALLOW_COPY_AND_ASSIGN(JHwBlob); |
| }; |
| |
| int register_android_os_HwBlob(JNIEnv *env); |
| |
| } // namespace android |
| |
| #endif // ANDROID_OS_HW_BLOB_H |
| |