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_service_commands_t {
     33     REGISTER_CLIENT = IBinder::FIRST_CALL_TRANSACTION,
     34     OPEN_STREAM,
     35     CLOSE_STREAM,
     36     GET_STREAM_DESCRIPTION,
     37     START_STREAM,
     38     PAUSE_STREAM,
     39     STOP_STREAM,
     40     FLUSH_STREAM,
     41     REGISTER_AUDIO_THREAD,
     42     UNREGISTER_AUDIO_THREAD
     43 };
     44 
     45 enum aaudio_client_commands_t {
     46     ON_STREAM_CHANGE = IBinder::FIRST_CALL_TRANSACTION
     47 };
     48 
     49 } // namespace android
     50 
     51 namespace aaudio {
     52 
     53 typedef int32_t  aaudio_handle_t;
     54 
     55 #define AAUDIO_HANDLE_INVALID  ((aaudio_handle_t) -1)
     56 
     57 // This must be a fixed width so it can be in shared memory.
     58 enum RingbufferFlags : uint32_t {
     59     NONE = 0,
     60     RATE_ISOCHRONOUS = 0x0001,
     61     RATE_ASYNCHRONOUS = 0x0002,
     62     COHERENCY_DMA = 0x0004,
     63     COHERENCY_ACQUIRE_RELEASE = 0x0008,
     64     COHERENCY_AUTO = 0x0010,
     65 };
     66 
     67 // This is not passed through Binder.
     68 // Client side code will convert Binder data and fill this descriptor.
     69 typedef struct RingBufferDescriptor_s {
     70     uint8_t* dataAddress;       // offset from read or write block
     71     int64_t* writeCounterAddress;
     72     int64_t* readCounterAddress;
     73     int32_t  bytesPerFrame;     // index is in frames
     74     int32_t  framesPerBurst;    // for ISOCHRONOUS queues
     75     int32_t  capacityInFrames;  // zero if unused
     76     RingbufferFlags flags;
     77 } RingBufferDescriptor;
     78 
     79 // This is not passed through Binder.
     80 // Client side code will convert Binder data and fill this descriptor.
     81 typedef struct EndpointDescriptor_s {
     82     // Set capacityInFrames to zero if Queue is unused.
     83     RingBufferDescriptor upMessageQueueDescriptor;   // server to client
     84     RingBufferDescriptor downMessageQueueDescriptor; // client to server
     85     RingBufferDescriptor dataQueueDescriptor;    // playback or capture
     86 } EndpointDescriptor;
     87 
     88 } // namespace aaudio
     89 
     90 #endif //BINDING_AAUDIOSERVICEDEFINITIONS_H
     91