1828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk/*
2828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * Copyright 2016 The Android Open Source Project
3828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk *
4828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * you may not use this file except in compliance with the License.
6828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * You may obtain a copy of the License at
7828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk *
8828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk *
10828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * Unless required by applicable law or agreed to in writing, software
11828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * See the License for the specific language governing permissions and
14828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk * limitations under the License.
15828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk */
16828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
175204d315c6c6f53188f8d1414dd1b55b6c90142bPhil Burk#ifndef ANDROID_AAUDIO_SHARED_REGION_PARCELABLE_H
185204d315c6c6f53188f8d1414dd1b55b6c90142bPhil Burk#define ANDROID_AAUDIO_SHARED_REGION_PARCELABLE_H
19828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
20828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk#include <stdint.h>
21828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
22828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk#include <sys/mman.h>
23828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk#include <binder/Parcelable.h>
24828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
25a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h>
26828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
27828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk#include "binding/SharedMemoryParcelable.h"
28828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
29828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkusing android::status_t;
30828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkusing android::Parcel;
31828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkusing android::Parcelable;
32828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
335ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burknamespace aaudio {
34828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
35828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkclass SharedRegionParcelable : public Parcelable {
36828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkpublic:
37828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    SharedRegionParcelable();
38828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    virtual ~SharedRegionParcelable();
39828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
40828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    void setup(int32_t sharedMemoryIndex, int32_t offsetInBytes, int32_t sizeInBytes);
41828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
42828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    virtual status_t writeToParcel(Parcel* parcel) const override;
43828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
44828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    virtual status_t readFromParcel(const Parcel* parcel) override;
45828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
465ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk    aaudio_result_t resolve(SharedMemoryParcelable *memoryParcels, void **regionAddressPtr);
47828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    bool isFileDescriptorSafe(SharedMemoryParcelable *memoryParcels);
49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
505ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk    aaudio_result_t validate();
51828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
52828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    void dump();
53828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
54828bea5f61f3c40d24759cd8739dd95570883b56Phil Burkprotected:
55828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    int32_t mSharedMemoryIndex = -1;
56828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    int32_t mOffsetInBytes     = 0;
57828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk    int32_t mSizeInBytes       = 0;
58828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk};
59828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
605ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk} /* namespace aaudio */
61828bea5f61f3c40d24759cd8739dd95570883b56Phil Burk
625204d315c6c6f53188f8d1414dd1b55b6c90142bPhil Burk#endif //ANDROID_AAUDIO_SHARED_REGION_PARCELABLE_H
63