Annotation of driverkit/libDriver/Kernel/snd_reply.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7:  * Reserved.  This file contains Original Code and/or Modifications of
        !             8:  * Original Code as defined in and that are subject to the Apple Public
        !             9:  * Source License Version 1.1 (the "License").  You may not use this file
        !            10:  * except in compliance with the License.  Please obtain a copy of the
        !            11:  * License at http://www.apple.com/publicsource and read it before using
        !            12:  * this file.
        !            13:  * 
        !            14:  * The Original Code and all software distributed under the License are
        !            15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
        !            19:  * License for the specific language governing rights and limitations
        !            20:  * under the License.
        !            21:  * 
        !            22:  * @APPLE_LICENSE_HEADER_END@
        !            23:  */
        !            24: /*
        !            25:  * audio_snd_reply.c
        !            26:  *
        !            27:  * Copyright (c) 1991, NeXT Computer, Inc.  All rights reserved.
        !            28:  *
        !            29:  *      Snd reply message routines.
        !            30:  *
        !            31:  * HISTORY
        !            32:  *      08/07/92/mtm    Original coding from m68k snd_reply.c.
        !            33:  */
        !            34: 
        !            35: #import "snd_reply.h"
        !            36: #import <bsd/dev/snd_msgs.h>
        !            37: 
        !            38: /*
        !            39:  * Interface routines for composing messages to send in response to
        !            40:  * sound facility services.
        !            41:  */
        !            42: 
        !            43: static msg_type_long_t snd_type_ool_template = {
        !            44:   {
        !            45:       0,       /* msg_type_name */
        !            46:       0,       /* msg_type_size */
        !            47:       0,       /* msg_type_number */
        !            48:       FALSE,   /* msg_type_inline */
        !            49:       TRUE,     /* msg_type_longform */
        !            50:       TRUE     /* msg_type_deallocate */
        !            51:   },
        !            52:   MSG_TYPE_INTEGER_8,  /* msg_type_long_name */
        !            53:   8,                   /* msg_type_long_size */
        !            54:   0,                   /* msg_type_long_number */
        !            55: };
        !            56: 
        !            57: static msg_type_t snd_type_int_template = {
        !            58:     MSG_TYPE_INTEGER_32,       /* msg_type_name */
        !            59:     32,                                /* msg_type_size */
        !            60:     1,                         /* msg_type_number */
        !            61:     TRUE,                      /* msg_type_inline */
        !            62:     FALSE,                     /* msg_type_longform */
        !            63:     FALSE                      /* msg_type_deallocate */
        !            64: };
        !            65: 
        !            66: /*
        !            67:  * Generic replies
        !            68:  */
        !            69: /*
        !            70:  * Message to return the device port.
        !            71:  */
        !            72: void audio_snd_reply_ret_device(msg_header_t *msg,
        !            73:                          port_name_t remote_port,
        !            74:                          port_name_t device_port)
        !            75: {
        !            76:     msg->msg_id = SND_MSG_RET_DEVICE;
        !            77:     msg->msg_local_port = device_port;
        !            78:     msg->msg_remote_port = remote_port;
        !            79: }
        !            80: 
        !            81: /*
        !            82:  * Message to return a stream port.
        !            83:  */
        !            84: void audio_snd_reply_ret_stream(msg_header_t *msg,
        !            85:                          port_name_t remote_port,
        !            86:                          port_name_t stream_port)
        !            87: {
        !            88:     msg->msg_id = SND_MSG_RET_STREAM;
        !            89:     msg->msg_local_port = stream_port;
        !            90:     msg->msg_remote_port = remote_port;
        !            91: }
        !            92: 
        !            93: static void snd_reply_with_tag(msg_header_t *msg, port_name_t port,
        !            94:                               int tag, int msg_id)
        !            95: {
        !            96:     snd_taged_reply_t *smsg = (snd_taged_reply_t *)msg;
        !            97: 
        !            98:     msg->msg_id = msg_id;
        !            99:     msg->msg_size = sizeof(snd_taged_reply_t);
        !           100:     msg->msg_remote_port = port;
        !           101:     smsg->data_tagType = snd_type_int_template;
        !           102:     smsg->data_tag = tag;
        !           103: }
        !           104: 
        !           105: /*
        !           106:  * Message return on illegal message.
        !           107:  */
        !           108: void audio_snd_reply_illegal_msg(msg_header_t *msg,
        !           109:                           port_name_t local_port,
        !           110:                           port_name_t remote_port,
        !           111:                           int msg_id,
        !           112:                           int error)
        !           113: {
        !           114:     snd_illegal_msg_t *smsg = (snd_illegal_msg_t *)msg;
        !           115:     
        !           116:     msg->msg_id = SND_MSG_ILLEGAL_MSG;
        !           117:     msg->msg_size = sizeof(snd_illegal_msg_t);
        !           118:     msg->msg_local_port = local_port;
        !           119:     msg->msg_remote_port = remote_port;
        !           120:     
        !           121:     smsg->dataType = snd_type_int_template;
        !           122:     smsg->dataType.msg_type_number = 2;
        !           123:     smsg->ill_msgid = msg_id;
        !           124:     smsg->ill_error = error;
        !           125: }
        !           126: 
        !           127: /*
        !           128:  * Replies specific to streaming soundout/soundin
        !           129:  */
        !           130: /*
        !           131:  * Message returning recorded data.
        !           132:  */
        !           133: void audio_snd_reply_recorded_data(msg_header_t *msg,
        !           134:                             port_name_t remote_port,
        !           135:                             int data_tag,
        !           136:                             pointer_t data,
        !           137:                             int nbytes)
        !           138: {
        !           139:     snd_recorded_data_t *smsg = (snd_recorded_data_t *)msg;
        !           140:     
        !           141:     msg->msg_simple = FALSE;
        !           142:     msg->msg_size = sizeof(snd_recorded_data_t);
        !           143:     msg->msg_type = MSG_TYPE_NORMAL;
        !           144:     msg->msg_remote_port = remote_port;
        !           145:     msg->msg_local_port = PORT_NULL;
        !           146:     msg->msg_id = SND_MSG_RECORDED_DATA;
        !           147:     
        !           148:     smsg->data_tagType = snd_type_int_template;
        !           149:     smsg->data_tag = data_tag;
        !           150:     smsg->dataType = snd_type_ool_template;
        !           151:     smsg->dataType.msg_type_long_number = nbytes;
        !           152:     smsg->recorded_data = data;
        !           153: }
        !           154: 
        !           155: /*
        !           156:  * Message to return a timeout indication.
        !           157:  */
        !           158: void audio_snd_reply_timed_out(msg_header_t *msg,
        !           159:                         port_name_t remote_port,
        !           160:                         int data_tag)
        !           161: {
        !           162:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           163:                              SND_MSG_TIMED_OUT);
        !           164: }
        !           165: 
        !           166: /*
        !           167:  * Message to return an integer count of number samples played/recorded.
        !           168:  */
        !           169: void audio_snd_reply_ret_samples(msg_header_t *msg,
        !           170:                           port_name_t remote_port,
        !           171:                           int nsamples, int timeStamp)
        !           172: {
        !           173:     snd_ret_samples_t *smsg = (snd_ret_samples_t *)msg;
        !           174: 
        !           175:     msg->msg_size = sizeof(snd_ret_samples_t);
        !           176:     msg->msg_id = SND_MSG_RET_SAMPLES;
        !           177:     msg->msg_remote_port = remote_port;
        !           178:     
        !           179:     smsg->dataType = snd_type_int_template;
        !           180:     smsg->nsamples = nsamples;
        !           181:     smsg->timeStamp = timeStamp;
        !           182: }
        !           183: 
        !           184: /*
        !           185:  * Message to return an overflow indication.
        !           186:  */
        !           187: void audio_snd_reply_overflow(msg_header_t *msg,
        !           188:                        port_name_t remote_port,
        !           189:                        int data_tag)
        !           190: {
        !           191:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           192:                              SND_MSG_OVERFLOW);
        !           193: }
        !           194: 
        !           195: /*
        !           196:  * Message to return a region started indication.
        !           197:  */
        !           198: void audio_snd_reply_started(msg_header_t *msg,
        !           199:                       port_name_t remote_port,
        !           200:                       int data_tag)
        !           201: {
        !           202:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           203:                              SND_MSG_STARTED);
        !           204: }
        !           205: 
        !           206: /*
        !           207:  * Message to return region completed indication.
        !           208:  */
        !           209: void audio_snd_reply_completed(msg_header_t *msg,
        !           210:                         port_name_t remote_port,
        !           211:                         int data_tag)
        !           212: {
        !           213:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           214:                              SND_MSG_COMPLETED);
        !           215: }
        !           216: 
        !           217: /*
        !           218:  * Message to return region aborted indication.
        !           219:  */
        !           220: void audio_snd_reply_aborted(msg_header_t *msg,
        !           221:                       port_name_t remote_port,
        !           222:                       int data_tag)
        !           223: {
        !           224:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           225:                              SND_MSG_ABORTED);
        !           226: }
        !           227: 
        !           228: /*
        !           229:  * Message to return region paused indication.
        !           230:  */
        !           231: void audio_snd_reply_paused(msg_header_t *msg,
        !           232:                      port_name_t remote_port,
        !           233:                      int data_tag)
        !           234: {
        !           235:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           236:                              SND_MSG_PAUSED);
        !           237: }
        !           238: 
        !           239: /*
        !           240:  * Message to return region resumed indication.
        !           241:  */
        !           242: void audio_snd_reply_resumed(msg_header_t *msg,
        !           243:                       port_name_t remote_port,
        !           244:                       int data_tag)
        !           245: {
        !           246:     return snd_reply_with_tag(msg, remote_port, data_tag,
        !           247:                              SND_MSG_RESUMED);
        !           248: }
        !           249: 
        !           250: /*
        !           251:  * Replies specific to the sound device.
        !           252:  */
        !           253: /*
        !           254:  * Message to return the set of parameters.
        !           255:  */
        !           256: void audio_snd_reply_ret_parms(msg_header_t *msg,
        !           257:                         port_name_t remote_port,
        !           258:                         u_int parms)
        !           259: {
        !           260:     snd_ret_parms_t *smsg = (snd_ret_parms_t *)msg;
        !           261:        
        !           262:     msg->msg_id = SND_MSG_RET_PARMS;
        !           263:     msg->msg_size = sizeof(snd_ret_parms_t);
        !           264:     msg->msg_remote_port = remote_port;
        !           265: 
        !           266:     smsg->dataType = snd_type_int_template;
        !           267:     smsg->parms = parms;
        !           268: }
        !           269: 
        !           270: /*
        !           271:  * Message to return the volume.
        !           272:  */
        !           273: void audio_snd_reply_ret_volume(msg_header_t *msg,
        !           274:                          port_name_t remote_port,
        !           275:                          u_int volume)
        !           276: {
        !           277:     snd_ret_volume_t *smsg = (snd_ret_volume_t *)msg;
        !           278:        
        !           279:     msg->msg_id = SND_MSG_RET_VOLUME;
        !           280:     msg->msg_size = sizeof(snd_ret_volume_t);
        !           281:     msg->msg_remote_port = remote_port;
        !           282: 
        !           283:     smsg->dataType = snd_type_int_template;
        !           284:     smsg->volume = volume;
        !           285: }
        !           286: 
        !           287: /*
        !           288:  * Message to return supported data formats.
        !           289:  */
        !           290: void audio_snd_reply_ret_formats(msg_header_t *msg,
        !           291:                           port_name_t remote_port,
        !           292:                           u_int rates, u_int low, u_int high,
        !           293:                           u_int encodings, u_int chans)
        !           294: {
        !           295:     snd_ret_stream_formats_t *smsg = (snd_ret_stream_formats_t *)msg;
        !           296:        
        !           297:     msg->msg_id = SND_MSG_RET_STREAM_FORMATS;
        !           298:     msg->msg_size = sizeof(snd_ret_stream_formats_t);
        !           299:     msg->msg_remote_port = remote_port;
        !           300: 
        !           301:     smsg->Type = snd_type_int_template;
        !           302:     smsg->Type.msg_type_number = 5;
        !           303:     smsg->rate = rates;
        !           304:     smsg->low_rate = low;
        !           305:     smsg->high_rate = high;
        !           306:     smsg->encoding = encodings;
        !           307:     smsg->chan_count = chans;
        !           308: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.