📄 snd_next.m
字号:
#import <servers/netname.h>
#import <libc.h>
#include "../client/client.h"
double snd_basetime;
port_t devPort;
extern port_t task_self_;
#define task_self() task_self_
//========================================================================
#ifndef _ntsoundNTSound
#define _ntsoundNTSound
/* Module NTSound */
#include <mach/kern_return.h>
#include <mach/port.h>
#include <mach/message.h>
#ifndef mig_external
#define mig_external extern
#endif
#include <mach/std_types.h>
#include <mach/mach_types.h>
typedef short *sound_data_t;
#define NTSOUNDNAME "NEXTIME_Sound"
/* Routine ntsoundAcquire */
mig_external kern_return_t ntsoundAcquire (
port_t kern_serv_port,
port_t owner_port,
vm_offset_t *dmaAddress,
int *dmaSize,
int *success);
/* Routine ntsoundRelease */
mig_external kern_return_t ntsoundRelease (
port_t kern_serv_port,
port_t owner_port);
/* Routine ntsoundStart */
mig_external kern_return_t ntsoundStart (
port_t kern_serv_port,
port_t owner_port);
/* Routine ntsoundStop */
mig_external kern_return_t ntsoundStop (
port_t kern_serv_port,
port_t owner_port);
/* Routine ntsoundConfig */
mig_external kern_return_t ntsoundConfig (
port_t kern_serv_port,
port_t owner_port,
int channelCount,
int samplingRate,
int encoding,
int useInterrupts);
/* Routine ntsoundBytesProcessed */
mig_external kern_return_t ntsoundBytesProcessed (
port_t kern_serv_port,
port_t owner_port,
int *byte_count);
/* Routine ntsoundDMACount */
mig_external kern_return_t ntsoundDMACount (
port_t kern_serv_port,
port_t owner_port,
int *dma_count);
/* Routine ntsoundInterruptCount */
mig_external kern_return_t ntsoundInterruptCount (
port_t kern_serv_port,
port_t owner_port,
int *irq_count);
/* Routine ntsoundWrite */
mig_external kern_return_t ntsoundWrite (
port_t kern_serv_port,
port_t owner_port,
sound_data_t data,
unsigned int dataCnt,
int *actual_count);
/* Routine ntsoundSetVolume */
mig_external kern_return_t ntsoundSetVolume (
port_t kern_serv_port,
port_t owner_port,
int value);
/* Routine ntsoundWireRange */
mig_external kern_return_t ntsoundWireRange (
port_t device_port,
port_t token,
port_t task,
vm_offset_t addr,
vm_size_t size,
boolean_t wire);
#endif _ntsoundNTSound
//========================================================================
extern port_t name_server_port;
#define NX_SoundDeviceParameterKeyBase 0
#define NX_SoundDeviceParameterValueBase 200
#define NX_SoundStreamParameterKeyBase 400
#define NX_SoundStreamParameterValueBase 600
#define NX_SoundParameterTagMax 799
typedef enum _NXSoundParameterTag {
NX_SoundDeviceBufferSize = NX_SoundDeviceParameterKeyBase,
NX_SoundDeviceBufferCount,
NX_SoundDeviceDetectPeaks,
NX_SoundDeviceRampUp,
NX_SoundDeviceRampDown,
NX_SoundDeviceInsertZeros,
NX_SoundDeviceDeemphasize,
NX_SoundDeviceMuteSpeaker,
NX_SoundDeviceMuteHeadphone,
NX_SoundDeviceMuteLineOut,
NX_SoundDeviceOutputLoudness,
NX_SoundDeviceOutputAttenuationStereo,
NX_SoundDeviceOutputAttenuationLeft,
NX_SoundDeviceOutputAttenuationRight,
NX_SoundDeviceAnalogInputSource,
NX_SoundDeviceMonitorAttenuation,
NX_SoundDeviceInputGainStereo,
NX_SoundDeviceInputGainLeft,
NX_SoundDeviceInputGainRight,
NX_SoundDeviceAnalogInputSource_Microphone
= NX_SoundDeviceParameterValueBase,
NX_SoundDeviceAnalogInputSource_LineIn,
NX_SoundStreamDataEncoding = NX_SoundStreamParameterKeyBase,
NX_SoundStreamSamplingRate,
NX_SoundStreamChannelCount,
NX_SoundStreamHighWaterMark,
NX_SoundStreamLowWaterMark,
NX_SoundStreamSource,
NX_SoundStreamSink,
NX_SoundStreamDetectPeaks,
NX_SoundStreamGainStereo,
NX_SoundStreamGainLeft,
NX_SoundStreamGainRight,
NX_SoundStreamDataEncoding_Linear16 = NX_SoundStreamParameterValueBase,
NX_SoundStreamDataEncoding_Linear8,
NX_SoundStreamDataEncoding_Mulaw8,
NX_SoundStreamDataEncoding_Alaw8,
NX_SoundStreamDataEncoding_AES,
NX_SoundStreamSource_Analog,
NX_SoundStreamSource_AES,
NX_SoundStreamSink_Analog,
NX_SoundStreamSink_AES
} NXSoundParameterTag;
//========================================================================
//#include "NTSound.h"
#include <mach/mach_types.h>
#include <mach/message.h>
#include <mach/mig_errors.h>
#include <mach/msg_type.h>
#if !defined(KERNEL) && !defined(MIG_NO_STRINGS)
#include <strings.h>
#endif
/* LINTLIBRARY */
extern port_t mig_get_reply_port();
extern void mig_dealloc_reply_port();
#ifndef mig_internal
#define mig_internal static
#endif
#ifndef TypeCheck
#define TypeCheck 1
#endif
#ifndef UseExternRCSId
#ifdef hc
#define UseExternRCSId 1
#endif
#endif
#ifndef UseStaticMsgType
#if !defined(hc) || defined(__STDC__)
#define UseStaticMsgType 1
#endif
#endif
#define msg_request_port msg_remote_port
#define msg_reply_port msg_local_port
/* Routine Acquire */
mig_external kern_return_t ntsoundAcquire (
port_t kern_serv_port,
port_t owner_port,
vm_offset_t *dmaAddress,
int *dmaSize,
int *success)
{
typedef struct {
msg_header_t Head;
msg_type_t owner_portType;
port_t owner_port;
} Request;
typedef struct {
msg_header_t Head;
msg_type_t RetCodeType;
kern_return_t RetCode;
msg_type_t dmaAddressType;
vm_offset_t dmaAddress;
msg_type_t dmaSizeType;
int dmaSize;
msg_type_t successType;
int success;
} Reply;
union {
Request In;
Reply Out;
} Mess;
register Request *InP = &Mess.In;
register Reply *OutP = &Mess.Out;
msg_return_t msg_result;
#if TypeCheck
boolean_t msg_simple;
#endif TypeCheck
unsigned int msg_size = 32;
#if UseStaticMsgType
static const msg_type_t owner_portType = {
/* msg_type_name = */ MSG_TYPE_PORT,
/* msg_type_size = */ 32,
/* msg_type_number = */ 1,
/* msg_type_inline = */ TRUE,
/* msg_type_longform = */ FALSE,
/* msg_type_deallocate = */ FALSE,
/* msg_type_unused = */ 0,
};
#endif UseStaticMsgType
#if UseStaticMsgType
static const msg_type_t RetCodeCheck = {
/* msg_type_name = */ MSG_TYPE_INTEGER_32,
/* msg_type_size = */ 32,
/* msg_type_number = */ 1,
/* msg_type_inline = */ TRUE,
/* msg_type_longform = */ FALSE,
/* msg_type_deallocate = */ FALSE,
/* msg_type_unused = */ 0
};
#endif UseStaticMsgType
#if UseStaticMsgType
static const msg_type_t dmaAddressCheck = {
/* msg_type_name = */ MSG_TYPE_INTEGER_32,
/* msg_type_size = */ 32,
/* msg_type_number = */ 1,
/* msg_type_inline = */ TRUE,
/* msg_type_longform = */ FALSE,
/* msg_type_deallocate = */ FALSE,
/* msg_type_unused = */ 0
};
#endif UseStaticMsgType
#if UseStaticMsgType
static const msg_type_t dmaSizeCheck = {
/* msg_type_name = */ MSG_TYPE_INTEGER_32,
/* msg_type_size = */ 32,
/* msg_type_number = */ 1,
/* msg_type_inline = */ TRUE,
/* msg_type_longform = */ FALSE,
/* msg_type_deallocate = */ FALSE,
/* msg_type_unused = */ 0
};
#endif UseStaticMsgType
#if UseStaticMsgType
static const msg_type_t successCheck = {
/* msg_type_name = */ MSG_TYPE_INTEGER_32,
/* msg_type_size = */ 32,
/* msg_type_number = */ 1,
/* msg_type_inline = */ TRUE,
/* msg_type_longform = */ FALSE,
/* msg_type_deallocate = */ FALSE,
/* msg_type_unused = */ 0
};
#endif UseStaticMsgType
#if UseStaticMsgType
InP->owner_portType = owner_portType;
#else UseStaticMsgType
InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
InP->owner_portType.msg_type_size = 32;
InP->owner_portType.msg_type_number = 1;
InP->owner_portType.msg_type_inline = TRUE;
InP->owner_portType.msg_type_longform = FALSE;
InP->owner_portType.msg_type_deallocate = FALSE;
#endif UseStaticMsgType
InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
InP->Head.msg_simple = FALSE;
InP->Head.msg_size = msg_size;
InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
InP->Head.msg_request_port = kern_serv_port;
InP->Head.msg_reply_port = mig_get_reply_port();
InP->Head.msg_id = 1008;
msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
if (msg_result != RPC_SUCCESS) {
if (msg_result == RCV_INVALID_PORT)
mig_dealloc_reply_port();
return msg_result;
}
#if TypeCheck
msg_size = OutP->Head.msg_size;
msg_simple = OutP->Head.msg_simple;
#endif TypeCheck
if (OutP->Head.msg_id != 1108)
return MIG_REPLY_MISMATCH;
#if TypeCheck
if (((msg_size != 56) || (msg_simple != TRUE)) &&
((msg_size != sizeof(death_pill_t)) ||
(msg_simple != TRUE) ||
(OutP->RetCode == KERN_SUCCESS)))
return MIG_TYPE_ERROR;
#endif TypeCheck
#if TypeCheck
#if UseStaticMsgType
if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
#else UseStaticMsgType
if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
(OutP->RetCodeType.msg_type_longform != FALSE) ||
(OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
(OutP->RetCodeType.msg_type_number != 1) ||
(OutP->RetCodeType.msg_type_size != 32))
#endif UseStaticMsgType
return MIG_TYPE_ERROR;
#endif TypeCheck
if (OutP->RetCode != KERN_SUCCESS)
return OutP->RetCode;
#if TypeCheck
#if UseStaticMsgType
if (* (int *) &OutP->dmaAddressType != * (int *) &dmaAddressCheck)
#else UseStaticMsgType
if ((OutP->dmaAddressType.msg_type_inline != TRUE) ||
(OutP->dmaAddressType.msg_type_longform != FALSE) ||
(OutP->dmaAddressType.msg_type_name != MSG_TYPE_INTEGER_32) ||
(OutP->dmaAddressType.msg_type_number != 1) ||
(OutP->dmaAddressType.msg_type_size != 32))
#endif UseStaticMsgType
return MIG_TYPE_ERROR;
#endif TypeCheck
*dmaAddress /* dmaAddress */ = /* *dmaAddress */ OutP->dmaAddress;
#if TypeCheck
#if UseStaticMsgType
if (* (int *) &OutP->dmaSizeType != * (int *) &dmaSizeCheck)
#else UseStaticMsgType
if ((OutP->dmaSizeType.msg_type_inline != TRUE) ||
(OutP->dmaSizeType.msg_type_longform != FALSE) ||
(OutP->dmaSizeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
(OutP->dmaSizeType.msg_type_number != 1) ||
(OutP->dmaSizeType.msg_type_size != 32))
#endif UseStaticMsgType
return MIG_TYPE_ERROR;
#endif TypeCheck
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -