AudioEndpointParcelable.h revision 828bea5f61f3c40d24759cd8739dd95570883b56
116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck/*
216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Copyright 2016 The Android Open Source Project
316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck *
416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Licensed under the Apache License, Version 2.0 (the "License");
516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * you may not use this file except in compliance with the License.
616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * You may obtain a copy of the License at
716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck *
816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck *      http://www.apache.org/licenses/LICENSE-2.0
916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck *
1016c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Unless required by applicable law or agreed to in writing, software
1116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * distributed under the License is distributed on an "AS IS" BASIS,
1216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * See the License for the specific language governing permissions and
1416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * limitations under the License.
1516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck */
1616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck
1716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#ifndef BINDING_AUDIOENDPOINTPARCELABLE_H
1816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck#define BINDING_AUDIOENDPOINTPARCELABLE_H
1979abbf22d4f672208327546661e694d837f564a9Derek Sollenberger
20d2dfd8f128b632ed99418ab2b32949c939a9a369Chris Craik#include <stdint.h>
21d2dfd8f128b632ed99418ab2b32949c939a9a369Chris Craik
227dc370bfe3223dfbcb368e0006c688dfd668ab01sergeyv//#include <sys/mman.h>
2356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger#include <binder/Parcel.h>
2498c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel#include <binder/Parcelable.h>
2598c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
2698c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel#include "binding/OboeServiceDefinitions.h"
27f4cf5d3b019fa60e96219578a4c6ad1a90c7b665Ben Wagner#include "binding/RingBufferParcelable.h"
2852771272f4f018f4fc6846224bf047497e784af1Stan Iliev
29f4cf5d3b019fa60e96219578a4c6ad1a90c7b665Ben Wagnerusing android::status_t;
30ee708facf127f2e8bed5970d5c05fa823fcfc1ceLeon Scroggins IIIusing android::Parcel;
31ee708facf127f2e8bed5970d5c05fa823fcfc1ceLeon Scroggins IIIusing android::Parcelable;
3216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck
3316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Recknamespace oboe {
3416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck
3516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck/**
3616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * Container for information about the message queues plus
3716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * general stream information needed by Oboe clients.
3816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * It contains no addresses, just sizes, offsets and file descriptors for
3916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck * shared memory that can be passed through Binder.
4016c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck */
4116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckclass AudioEndpointParcelable : public Parcelable {
4216c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reckpublic:
4316c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck    AudioEndpointParcelable();
4416c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck    virtual ~AudioEndpointParcelable();
4516c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck
4616c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck    /**
4716c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck     * Add the file descriptor to the table.
4816c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck     * @return index in table or negative error
4916c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck     */
5016c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck    int32_t addFileDescriptor(int fd, int32_t sizeInBytes);
5116c9d6a92e1b86d448c00c52a1630f3e71e6df76John Reck
52d2dfd8f128b632ed99418ab2b32949c939a9a369Chris Craik    virtual status_t writeToParcel(Parcel* parcel) const override;
5398c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
5498c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    virtual status_t readFromParcel(const Parcel* parcel) override;
5598c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
5698c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    oboe_result_t resolve(EndpointDescriptor *descriptor);
5798c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
5898c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    oboe_result_t validate();
5998c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
6098c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    void dump();
6198c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel
6298c78dad1969e2321cfee2085faa55d95bba7e29Greg Danielpublic: // TODO add getters
6398c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    // Set capacityInFrames to zero if Queue is unused.
6498c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    RingBufferParcelable    mUpMessageQueueParcelable;   // server to client
6598c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    RingBufferParcelable    mDownMessageQueueParcelable; // to server
6698c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    RingBufferParcelable    mUpDataQueueParcelable;      // eg. record, could share same queue
6798c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    RingBufferParcelable    mDownDataQueueParcelable;    // eg. playback
68d2dfd8f128b632ed99418ab2b32949c939a9a369Chris Craik
69243e85b2e443def1ef47a180e824b36f513c8db8Chris Craikprivate:
7098c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel    int32_t                 mNumSharedMemories = 0;
7156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger    SharedMemoryParcelable  mSharedMemories[MAX_SHARED_MEMORIES];
72243e85b2e443def1ef47a180e824b36f513c8db8Chris Craik};
73243e85b2e443def1ef47a180e824b36f513c8db8Chris Craik
74243e85b2e443def1ef47a180e824b36f513c8db8Chris Craik} /* namespace oboe */
75243e85b2e443def1ef47a180e824b36f513c8db8Chris Craik
7656ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger#endif //BINDING_AUDIOENDPOINTPARCELABLE_H
77d2dfd8f128b632ed99418ab2b32949c939a9a369Chris Craik