⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audbri.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ident   "@(#)audbri.c 1.1 92/07/30 SMI"/* * Copyright (C) 1992 by Sun Microsystems, Inc. *//* *  Main file for the DBRI/MMCODEC audio test.  It has the all the  * Sundiag interface routines.  The DBRI and MMCODEC devices are  * used on 'Campus2' and 'Synergy' platforms and Sbus 'Batphone' card. */#include <stdio.h>#include <fcntl.h>#include <stropts.h>#include <sys/types.h>#include <sys/file.h>#include <sys/ioctl.h>#include <sys/asynch.h>/* #include <sun/audioio.h> ...not there yet... */#include "audioio.h" #include "sdrtns.h"#include "../../../lib/include/libonline.h"#include "audbri.h"#include "audbri_msg.h"static int	lt = 1;int	high_freq = 0;	/* The highest test frequency requird */int	param_debug = 0;int	gen_file = 0;	/* Generate the fft mag file */extern	band_data_t bdata_48000[];extern	au_data_t sbmic_audata[],loli_audata[],hdli_audata[],crystal_audata[];main(argc, argv)int	argc;char	*argv[];{	versionid = "%I";	device_name = DEVICE_NAME;	/*	 * SunDiag initialization	 */	test_init(argc, argv, process_test_args, routine_usage, 		test_usage_msg); 	/*	 * make sure device is there before trying to run test	 */	if (!exec_by_sundiag) {		valid_dev_name();		probe_audbridev();	}	/*	 * run tests	 */	run_tests(single_pass ? 1 : TOTAL_PASS);	/*	 * clean up and exit	 */	clean_up();	test_end();				}/** * Process_test_args() processes test-specific command line aguments. */process_test_args(argv, argindex)char *argv[];int  argindex;{int	i;	if (strcmp(argv[argindex], "C") == 0) {		calibration_test = TRUE;	}	else if (strncmp(argv[argindex], "D=", 2) == 0) {		device_name = argv[argindex]+2;	}	else if (strncmp(argv[argindex], "F=", 2) == 0) {		refname = argv[argindex]+2;	}	else if (strncmp(argv[argindex], "G", 2) == 0) {		gen_file = 1;	}	else if (strncmp(argv[argindex], "H=", 2) == 0) {		high_freq = atoi(argv[argindex]+2);		bdata_48000[0].end_freq = high_freq/8;		bdata_48000[1].start_freq = bdata_48000[0].end_freq+1;		bdata_48000[1].end_freq = (bdata_48000[1].end_freq*high_freq)/48000;		bdata_48000[2].start_freq = bdata_48000[1].end_freq+1;		bdata_48000[2].end_freq = (bdata_48000[2].end_freq*high_freq)/48000;		bdata_48000[3].start_freq = bdata_48000[2].end_freq+1;		for (i = 0; sbmic_audata[i].sample_rate; i++) {		    if (sbmic_audata[i].sample_rate == 48000) break;		}		sbmic_audata[i].sample_rate = high_freq;		sbmic_audata[i].lfreq = high_freq/8;		for (i = 0; loli_audata[i].sample_rate; i++) {		    if (loli_audata[i].sample_rate == 48000) break;		}		loli_audata[i].sample_rate = high_freq;		loli_audata[i].lfreq = high_freq/8;		loli_audata[i].rfreq = high_freq/8;		loli_audata[i+1].sample_rate = high_freq;		loli_audata[i+1].rfreq = high_freq/8;		loli_audata[i+2].sample_rate = high_freq;		loli_audata[i+2].lfreq = high_freq/8;		for (i = 0; hdli_audata[i].sample_rate; i++) {		    if (hdli_audata[i].sample_rate == 48000) break;		}		hdli_audata[i].sample_rate = high_freq;		hdli_audata[i].lfreq = high_freq/8;		hdli_audata[i].rfreq = high_freq/8;		hdli_audata[i+1].sample_rate = high_freq;		hdli_audata[i+1].rfreq = high_freq/8;		hdli_audata[i+2].sample_rate = high_freq;		hdli_audata[i+2].lfreq = high_freq/8;		for (i = 0; crystal_audata[i].sample_rate; i++) {		    if (crystal_audata[i].sample_rate == 48000) break;		}		crystal_audata[i].sample_rate = high_freq;	}	else if (strncmp(argv[argindex], "I=", 2) == 0) {		ioctldev_name = argv[argindex]+2;	}	else if (strcmp(argv[argindex], "L") == 0) {		loop_test = TRUE;	}	else if (strcmp(argv[argindex], "M") == 0) {		music_test = TRUE;	}	else if (strcmp(argv[argindex], "P") == 0) {		param_debug = TRUE;	}	else if (strcmp(argv[argindex], "S") == 0) {		controls_test = TRUE;	}	else if (strncmp(argv[argindex], "T=", 2) == 0) {		lt = atoi(argv[argindex]+2);		if (lt < 0 || lt > 2) {			return(FALSE);		}	}	else if (quick_test || (strcmp(argv[argindex], "X") == 0)) {		crystal_test = TRUE;	}	else if (strcmp(argv[argindex], "Z") == 0) {		dump_signals = TRUE;	}	else {		return (FALSE);	}   return (TRUE);}/* * routine_usage() explain the meaning of each test-specific command argument. */routine_usage(){  send_message(0, CONSOLE, "%s specific arguments [default is S]:\n%s",	test_name, test_usage_msg);}/* * You may also want to consider validating the device name, if your test is * also to be run standalone (i.e., without sundiag) under Unix. */valid_dev_name(){   func_name = "valid_dev_name";   TRACE_IN   TRACE_OUT   return (0);}/* * The probing function should check that the specified device is available * to be tested(optional if run by Sundiag). Usually, this involves opening * the device file, and using an appropriate ioctl to check the status of the * device, and then closing the device file. There are several flavors of * ioctls: see dkio(4s), fbio(4s), if(4n), mtio(4), and so on. It is nice * to put the probe code into a separate code module, because it usually has * most of the code which needs to be changed for a new SunOS release or port. */probe_audbridev(){	int	device_type;	func_name = "probe_audbridev";	TRACE_IN	/*	 *  open audio control device	 */	if ((audioctlfd = open(ioctldev_name, O_RDWR|O_NDELAY)) < 0) {		send_message(ERSYS, ERROR, er_open, ioctldev_name, SYSMSG);	}	/*	 *  See if this is an appropriate audio device.	 */        if (ioctl(audioctlfd, AUDIO_GETDEV, &device_type) < 0) {                send_message(ERSYS, ERROR, er_ioctl,                        "AUDIO_GETDEV", SYSMSG);        }	close(audioctlfd);	if (device_type != AUDIO_DEV_SPEAKERBOX && 			device_type != AUDIO_DEV_CODEC) {                send_message(ERAUDIO, ERROR, er_device, ioctldev_name);        }	TRACE_OUT	return(0);}/* * Run the test while pass < total_pass. */run_tests(total_pass)int total_pass;{  int	pass=0;  int	errors=0;	func_name = "run_tests";	TRACE_IN	while (++pass <= total_pass) {		send_message(0, VERBOSE, "Pass= %d, Error= %d", pass, errors);		if (!audbridev_test()) {			if (!run_on_error) {				send_message(TEST_ERROR, ERROR, failed_msg);			}			else if (++errors >= ERROR_LIMIT) {				send_message(TOO_MANY_ERRORS, FATAL, 					err_limit_msg);			}		}	}	TRACE_OUT}/* * The actual test.  Return TRUE if the test passed, otherwise FALSE. */intaudbridev_test(){	int errors = 0;	func_name = "audbridev_test";	TRACE_IN	/*	 *  open audio control device	 */	if ((audioctlfd = open(ioctldev_name, O_RDWR|O_NDELAY)) < 0) {		send_message(ERSYS, ERROR, er_open, ioctldev_name, SYSMSG);	}	/*	 *  Force the user to specify a reference file name when	 * doing calibration so that they won't inadvertently	 * remove a reference file.	 */	if (calibration_test == TRUE && refname[0] == ' ') {		strcpy(refname,ldata[lt].refname);/*		send_message(ERAUDIO, ERROR, er_refspec); */	}#ifdef	NEVER	/*	 *  If no test is selected then run 'Speakerbox Controls and Mute	 * Indicator Test.	 */	if (!(calibration_test || loop_test || controls_test)) {		crystal_test = TRUE;	}#endif	NEVER	/*	 * Run calibration test if requested.	 */	if (calibration_test == TRUE) {		ltype = lt;		errors += audbri_cal();	}	/*	 * Run loop test if requested.	 */	if (loop_test == TRUE) {		ltype = lt;		set_ref();		errors += audbri_loop();		unset_ref();	}	if (music_test == TRUE) {		errors += audbri_music();	}	/*	 * Run crystal test if requested.	 */	if (crystal_test == TRUE) {		errors += audbri_crystal();	}	/*	 * Run controls test if requested.	 */	if (controls_test == TRUE) {		errors += audbri_controls();	}	TRACE_OUT	return(errors ? FALSE : TRUE);}/* * clean_up(), contains necessary code to clean up resources before exiting. * Note: this function is always required in order to link with sdrtns.c * successfully. */clean_up(){  func_name = "clean_up";  TRACE_IN  TRACE_OUT  return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -