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 ANDROID_AAUDIO_AAUDIO_SERVICE_MESSAGE_H
18 #define ANDROID_AAUDIO_AAUDIO_SERVICE_MESSAGE_H
19 
20 #include <stdint.h>
21 
22 #include <aaudio/AAudio.h>
23 
24 namespace aaudio {
25 
26 // TODO move this to an "include" folder for the service.
27 
28 // Used to send information about the HAL to the client.
29 struct AAudioMessageTimestamp {
30     int64_t position;     // number of frames transferred so far
31     int64_t timestamp;    // time when that position was reached
32 };
33 
34 typedef enum aaudio_service_event_e : uint32_t {
35     AAUDIO_SERVICE_EVENT_STARTED,
36     AAUDIO_SERVICE_EVENT_PAUSED,
37     AAUDIO_SERVICE_EVENT_STOPPED,
38     AAUDIO_SERVICE_EVENT_FLUSHED,
39     AAUDIO_SERVICE_EVENT_DISCONNECTED,
40     AAUDIO_SERVICE_EVENT_VOLUME,
41     AAUDIO_SERVICE_EVENT_XRUN
42 } aaudio_service_event_t;
43 
44 struct AAudioMessageEvent {
45     aaudio_service_event_t event;
46     union {
47         // Align so that 32 and 64-bit code can exchange messages through shared memory.
48         alignas(8)
49         double  dataDouble;
50         int64_t dataLong;
51     };
52 };
53 
54 typedef struct AAudioServiceMessage_s {
55     enum class code : uint32_t {
56         NOTHING,
57         TIMESTAMP_SERVICE, // when frame is read or written by the service to the client
58         TIMESTAMP_HARDWARE, // when frame is at DAC or ADC
59         EVENT,
60     };
61 
62     code      what;
63     union {
64         // Align so that 32 and 64-bit code can exchange messages through shared memory.
65         alignas(8)
66         AAudioMessageTimestamp timestamp; // what == TIMESTAMP
67         AAudioMessageEvent event;         // what == EVENT
68     };
69 } AAudioServiceMessage;
70 
71 } /* namespace aaudio */
72 
73 #endif //ANDROID_AAUDIO_AAUDIO_SERVICE_MESSAGE_H
74