bcm2835_vcaudioreg.h revision 1.2 1 1.1 jmcneill /*
2 1.1 jmcneill Copyright (c) 2012, Broadcom Europe Ltd
3 1.1 jmcneill All rights reserved.
4 1.1 jmcneill
5 1.1 jmcneill Redistribution and use in source and binary forms, with or without
6 1.1 jmcneill modification, are permitted provided that the following conditions are met:
7 1.1 jmcneill * Redistributions of source code must retain the above copyright
8 1.1 jmcneill notice, this list of conditions and the following disclaimer.
9 1.1 jmcneill * Redistributions in binary form must reproduce the above copyright
10 1.1 jmcneill notice, this list of conditions and the following disclaimer in the
11 1.1 jmcneill documentation and/or other materials provided with the distribution.
12 1.1 jmcneill * Neither the name of the copyright holder nor the
13 1.1 jmcneill names of its contributors may be used to endorse or promote products
14 1.1 jmcneill derived from this software without specific prior written permission.
15 1.1 jmcneill
16 1.1 jmcneill THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 1.1 jmcneill ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 1.1 jmcneill WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 1.1 jmcneill DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20 1.1 jmcneill DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 1.1 jmcneill (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 1.1 jmcneill LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 1.1 jmcneill ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 1.1 jmcneill (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 1.1 jmcneill SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 1.1 jmcneill */
27 1.1 jmcneill
28 1.1 jmcneill #ifndef _VC_AUDIO_DEFS_H_
29 1.1 jmcneill #define _VC_AUDIO_DEFS_H_
30 1.1 jmcneill
31 1.1 jmcneill #define VC_AUDIOSERV_MIN_VER 1
32 1.1 jmcneill #define VC_AUDIOSERV_VER 2
33 1.1 jmcneill
34 1.1 jmcneill // FourCC code used for VCHI connection
35 1.1 jmcneill #define VC_AUDIO_SERVER_NAME MAKE_FOURCC("AUDS")
36 1.1 jmcneill
37 1.1 jmcneill // Maximum message length
38 1.1 jmcneill #define VC_AUDIO_MAX_MSG_LEN (sizeof( VC_AUDIO_MSG_T ))
39 1.1 jmcneill
40 1.1 jmcneill // List of screens that are currently supported
41 1.1 jmcneill // All message types supported for HOST->VC direction
42 1.1 jmcneill typedef enum
43 1.1 jmcneill {
44 1.1 jmcneill VC_AUDIO_MSG_TYPE_RESULT, // Generic result
45 1.1 jmcneill VC_AUDIO_MSG_TYPE_COMPLETE, // playback of samples complete
46 1.1 jmcneill VC_AUDIO_MSG_TYPE_CONFIG, // Configure
47 1.2 skrll VC_AUDIO_MSG_TYPE_CONTROL, // control
48 1.1 jmcneill VC_AUDIO_MSG_TYPE_OPEN, // open
49 1.1 jmcneill VC_AUDIO_MSG_TYPE_CLOSE, // close/shutdown
50 1.1 jmcneill VC_AUDIO_MSG_TYPE_START, // start output (i.e. resume)
51 1.1 jmcneill VC_AUDIO_MSG_TYPE_STOP, // stop output (i.e. pause)
52 1.1 jmcneill VC_AUDIO_MSG_TYPE_WRITE, // write samples
53 1.1 jmcneill VC_AUDIO_MSG_TYPE_MAX
54 1.1 jmcneill
55 1.1 jmcneill } VC_AUDIO_MSG_TYPE;
56 1.1 jmcneill
57 1.1 jmcneill #if 0
58 1.1 jmcneill static const char *vc_audio_msg_type_names[] = {
59 1.1 jmcneill "VC_AUDIO_MSG_TYPE_RESULT",
60 1.1 jmcneill "VC_AUDIO_MSG_TYPE_COMPLETE",
61 1.1 jmcneill "VC_AUDIO_MSG_TYPE_CONFIG",
62 1.1 jmcneill "VC_AUDIO_MSG_TYPE_CONTROL",
63 1.1 jmcneill "VC_AUDIO_MSG_TYPE_OPEN",
64 1.1 jmcneill "VC_AUDIO_MSG_TYPE_CLOSE",
65 1.1 jmcneill "VC_AUDIO_MSG_TYPE_START",
66 1.1 jmcneill "VC_AUDIO_MSG_TYPE_STOP",
67 1.1 jmcneill "VC_AUDIO_MSG_TYPE_WRITE",
68 1.1 jmcneill "VC_AUDIO_MSG_TYPE_MAX"
69 1.1 jmcneill };
70 1.1 jmcneill #endif
71 1.1 jmcneill
72 1.1 jmcneill // configure the audio
73 1.1 jmcneill typedef struct
74 1.1 jmcneill {
75 1.1 jmcneill uint32_t channels;
76 1.1 jmcneill uint32_t samplerate;
77 1.1 jmcneill uint32_t bps;
78 1.1 jmcneill
79 1.1 jmcneill } VC_AUDIO_CONFIG_T;
80 1.1 jmcneill
81 1.1 jmcneill typedef struct
82 1.1 jmcneill {
83 1.1 jmcneill uint32_t volume;
84 1.1 jmcneill uint32_t dest;
85 1.1 jmcneill
86 1.1 jmcneill } VC_AUDIO_CONTROL_T;
87 1.1 jmcneill
88 1.1 jmcneill // audio
89 1.1 jmcneill typedef struct
90 1.1 jmcneill {
91 1.1 jmcneill uint32_t dummy;
92 1.1 jmcneill
93 1.1 jmcneill } VC_AUDIO_OPEN_T;
94 1.1 jmcneill
95 1.1 jmcneill // audio
96 1.1 jmcneill typedef struct
97 1.1 jmcneill {
98 1.1 jmcneill uint32_t dummy;
99 1.1 jmcneill
100 1.1 jmcneill } VC_AUDIO_CLOSE_T;
101 1.1 jmcneill // audio
102 1.1 jmcneill typedef struct
103 1.1 jmcneill {
104 1.1 jmcneill uint32_t dummy;
105 1.1 jmcneill
106 1.1 jmcneill } VC_AUDIO_START_T;
107 1.1 jmcneill // audio
108 1.1 jmcneill typedef struct
109 1.1 jmcneill {
110 1.1 jmcneill uint32_t draining;
111 1.1 jmcneill
112 1.1 jmcneill } VC_AUDIO_STOP_T;
113 1.1 jmcneill
114 1.1 jmcneill // configure the write audio samples
115 1.1 jmcneill typedef struct
116 1.1 jmcneill {
117 1.1 jmcneill uint32_t count; // in bytes
118 1.1 jmcneill void *callback;
119 1.1 jmcneill void *cookie;
120 1.1 jmcneill uint16_t silence;
121 1.1 jmcneill uint16_t max_packet;
122 1.1 jmcneill } VC_AUDIO_WRITE_T;
123 1.1 jmcneill
124 1.1 jmcneill // Generic result for a request (VC->HOST)
125 1.1 jmcneill typedef struct
126 1.1 jmcneill {
127 1.1 jmcneill int32_t success; // Success value
128 1.1 jmcneill
129 1.1 jmcneill } VC_AUDIO_RESULT_T;
130 1.1 jmcneill
131 1.1 jmcneill // Generic result for a request (VC->HOST)
132 1.1 jmcneill typedef struct
133 1.1 jmcneill {
134 1.1 jmcneill int32_t count; // Success value
135 1.1 jmcneill void *callback;
136 1.1 jmcneill void *cookie;
137 1.1 jmcneill } VC_AUDIO_COMPLETE_T;
138 1.1 jmcneill
139 1.1 jmcneill // Message header for all messages in HOST->VC direction
140 1.1 jmcneill typedef struct
141 1.1 jmcneill {
142 1.1 jmcneill int32_t type; // Message type (VC_AUDIO_MSG_TYPE)
143 1.1 jmcneill union
144 1.1 jmcneill {
145 1.1 jmcneill VC_AUDIO_CONFIG_T config;
146 1.1 jmcneill VC_AUDIO_CONTROL_T control;
147 1.1 jmcneill VC_AUDIO_OPEN_T open;
148 1.1 jmcneill VC_AUDIO_CLOSE_T close;
149 1.1 jmcneill VC_AUDIO_START_T start;
150 1.1 jmcneill VC_AUDIO_STOP_T stop;
151 1.1 jmcneill VC_AUDIO_WRITE_T write;
152 1.1 jmcneill VC_AUDIO_RESULT_T result;
153 1.1 jmcneill VC_AUDIO_COMPLETE_T complete;
154 1.1 jmcneill } u;
155 1.1 jmcneill } VC_AUDIO_MSG_T;
156 1.1 jmcneill
157 1.1 jmcneill
158 1.1 jmcneill #endif // _VC_AUDIO_DEFS_H_
159