Home | History | Annotate | Line # | Download | only in broadcom
bcm2835_vcaudioreg.h revision 1.1
      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.1  jmcneill    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