Home | History | Annotate | Download | only in binding
      1 /*
      2  * Copyright (C) 2016 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 BINDING_AAUDIOSERVICEDEFINITIONS_H
     18 #define BINDING_AAUDIOSERVICEDEFINITIONS_H
     19 
     20 #include <stdint.h>
     21 #include <utils/RefBase.h>
     22 #include <binder/TextOutput.h>
     23 #include <binder/IInterface.h>
     24 
     25 #include <aaudio/AAudio.h>
     26 
     27 using android::NO_ERROR;
     28 using android::IBinder;
     29 
     30 namespace android {
     31 
     32 enum aaudio_commands_t {
     33     OPEN_STREAM = IBinder::FIRST_CALL_TRANSACTION,
     34     CLOSE_STREAM,
     35     GET_STREAM_DESCRIPTION,
     36     START_STREAM,
     37     PAUSE_STREAM,
     38     STOP_STREAM,
     39     FLUSH_STREAM,
     40     REGISTER_AUDIO_THREAD,
     41     UNREGISTER_AUDIO_THREAD
     42 };
     43 
     44 } // namespace android
     45 
     46 namespace aaudio {
     47 
     48 typedef int32_t  aaudio_handle_t;
     49 
     50 #define AAUDIO_HANDLE_INVALID  ((aaudio_handle_t) -1)
     51 
     52 // This must be a fixed width so it can be in shared memory.
     53 enum RingbufferFlags : uint32_t {
     54     NONE = 0,
     55     RATE_ISOCHRONOUS = 0x0001,
     56     RATE_ASYNCHRONOUS = 0x0002,
     57     COHERENCY_DMA = 0x0004,
     58     COHERENCY_ACQUIRE_RELEASE = 0x0008,
     59     COHERENCY_AUTO = 0x0010,
     60 };
     61 
     62 // This is not passed through Binder.
     63 // Client side code will convert Binder data and fill this descriptor.
     64 typedef struct RingBufferDescriptor_s {
     65     uint8_t* dataAddress;       // offset from read or write block
     66     int64_t* writeCounterAddress;
     67     int64_t* readCounterAddress;
     68     int32_t  bytesPerFrame;     // index is in frames
     69     int32_t  framesPerBurst;    // for ISOCHRONOUS queues
     70     int32_t  capacityInFrames;  // zero if unused
     71     RingbufferFlags flags;
     72 } RingBufferDescriptor;
     73 
     74 // This is not passed through Binder.
     75 // Client side code will convert Binder data and fill this descriptor.
     76 typedef struct EndpointDescriptor_s {
     77     // Set capacityInFrames to zero if Queue is unused.
     78     RingBufferDescriptor upMessageQueueDescriptor;   // server to client
     79     RingBufferDescriptor downMessageQueueDescriptor; // client to server
     80     RingBufferDescriptor dataQueueDescriptor;    // playback or capture
     81 } EndpointDescriptor;
     82 
     83 } // namespace aaudio
     84 
     85 #endif //BINDING_AAUDIOSERVICEDEFINITIONS_H
     86