Blame iecset/iecbits.c

Packit 229ac0
/*
Packit 229ac0
   iecdump - dump IEC958 status bits on ALSA
Packit 229ac0
   Copyright (C) 2003 by Takashi Iwai <tiwai@suse.de>
Packit 229ac0
Packit 229ac0
   This program is free software; you can redistribute it and/or
Packit 229ac0
   modify it under the terms of the GNU General Public License
Packit 229ac0
   as published by the Free Software Foundation; either version 2
Packit 229ac0
   of the License, or (at your option) any later version.
Packit 229ac0
   
Packit 229ac0
   This program is distributed in the hope that it will be useful,
Packit 229ac0
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 229ac0
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 229ac0
   GNU General Public License for more details.
Packit 229ac0
   
Packit 229ac0
   You should have received a copy of the GNU General Public License
Packit 229ac0
   along with this program; if not, write to the Free Software
Packit 229ac0
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit 229ac0
 */
Packit 229ac0
Packit 229ac0
#include <stdio.h>
Packit 229ac0
#include <alsa/asoundlib.h>
Packit 229ac0
Packit 229ac0
struct category_str {
Packit 229ac0
	int val;
Packit 229ac0
	const char *name;
Packit 229ac0
};
Packit 229ac0
Packit 229ac0
static const struct category_str con_category[] = {
Packit 229ac0
	{ IEC958_AES1_CON_GENERAL, "general" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_IEC908_CD, "CD" },
Packit 229ac0
	{ IEC958_AES1_CON_NON_IEC908_CD, "non-IEC908 CD" },
Packit 229ac0
	{ IEC958_AES1_CON_MINI_DISC, "Mini-Disc" },
Packit 229ac0
	{ IEC958_AES1_CON_DVD, "DVD" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_PCM_CODER, "PCM coder" },
Packit 229ac0
	{ IEC958_AES1_CON_MIXER, "digital signal mixer" },
Packit 229ac0
	{ IEC958_AES1_CON_RATE_CONVERTER, "rate converter" },
Packit 229ac0
	{ IEC958_AES1_CON_SAMPLER, "sampler" },
Packit 229ac0
	{ IEC958_AES1_CON_DSP, "digital sound processor" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_DAT, "DAT" },
Packit 229ac0
	{ IEC958_AES1_CON_VCR, "VCR" },
Packit 229ac0
	{ IEC958_AES1_CON_DCC, "DCC" },
Packit 229ac0
	{ IEC958_AES1_CON_MAGNETIC_DISC, "magnetic disc" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_DAB_JAPAN, "digital audio broadcast (Japan)" },
Packit 229ac0
	{ IEC958_AES1_CON_DAB_EUROPE, "digital audio broadcast (Europe)" },
Packit 229ac0
	{ IEC958_AES1_CON_DAB_USA, "digital audio broadcast (USA)" },
Packit 229ac0
	{ IEC958_AES1_CON_SOFTWARE, "software delivery" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_SYNTHESIZER, "synthesizer" },
Packit 229ac0
	{ IEC958_AES1_CON_MICROPHONE, "microphone" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_ADC, "ADC without copyright information" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_ADC_COPYRIGHT, "ADC with copyright information" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_SOLIDMEM_DIGITAL_RECORDER_PLAYER, "flash memory recorder/player" },
Packit 229ac0
Packit 229ac0
	{ IEC958_AES1_CON_EXPERIMENTAL, "experimental" },
Packit 229ac0
};
Packit 229ac0
Packit 229ac0
Packit 229ac0
#define ARRAY_SIZE(x) (int)(sizeof(x)/sizeof(x[0]))
Packit 229ac0
Packit 229ac0
void dump_iec958(snd_aes_iec958_t *iec)
Packit 229ac0
{
Packit 229ac0
	int i;
Packit 229ac0
Packit 229ac0
	if (! (iec->status[0] & IEC958_AES0_PROFESSIONAL)) {
Packit 229ac0
		/* consumer */
Packit 229ac0
		printf("Mode: consumer\n");
Packit 229ac0
		printf("Data: ");
Packit 229ac0
		if (!(iec->status[0] & IEC958_AES0_NONAUDIO)) {
Packit 229ac0
			printf("audio\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("non-audio\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Rate: ");
Packit 229ac0
		switch (iec->status[3] & IEC958_AES3_CON_FS) {
Packit 229ac0
		case IEC958_AES3_CON_FS_22050:
Packit 229ac0
			printf("22050 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_24000:
Packit 229ac0
			printf("24000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_32000:
Packit 229ac0
			printf("32000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_44100:
Packit 229ac0
			printf("44100 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_48000:
Packit 229ac0
			printf("48000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_88200:
Packit 229ac0
			printf("88200 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_96000:
Packit 229ac0
			printf("96000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_176400:
Packit 229ac0
			printf("176400 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_192000:
Packit 229ac0
			printf("192000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_768000:
Packit 229ac0
			printf("768000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_FS_NOTID:
Packit 229ac0
			printf("not indicated\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
		printf("Copyright: ");
Packit 229ac0
		if (iec->status[0] & IEC958_AES0_CON_NOT_COPYRIGHT) {
Packit 229ac0
			printf("permitted\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("protected\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Emphasis: ");
Packit 229ac0
		if ((iec->status[0] & IEC958_AES0_CON_EMPHASIS) != IEC958_AES0_CON_EMPHASIS_5015) {
Packit 229ac0
			printf("none\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("50/15us\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Category: ");
Packit 229ac0
		for (i = 0; i < ARRAY_SIZE(con_category); i++) {
Packit 229ac0
			if ((iec->status[1] & IEC958_AES1_CON_CATEGORY) == con_category[i].val) {
Packit 229ac0
				printf("%s\n", con_category[i].name);
Packit 229ac0
				break;
Packit 229ac0
			}
Packit 229ac0
		}
Packit 229ac0
		if (i >= ARRAY_SIZE(con_category)) {
Packit 229ac0
			printf("unknown 0x%x\n", iec->status[1] & IEC958_AES1_CON_CATEGORY);
Packit 229ac0
		}
Packit 229ac0
		printf("Original: ");
Packit 229ac0
		if (iec->status[1] & IEC958_AES1_CON_ORIGINAL) {
Packit 229ac0
			printf("original\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("1st generation\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Clock: ");
Packit 229ac0
		switch (iec->status[3] & IEC958_AES3_CON_CLOCK) {
Packit 229ac0
		case IEC958_AES3_CON_CLOCK_1000PPM:
Packit 229ac0
			printf("1000 ppm\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_CLOCK_50PPM:
Packit 229ac0
			printf("50 ppm\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES3_CON_CLOCK_VARIABLE:
Packit 229ac0
			printf("variable pitch\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
	} else {
Packit 229ac0
		printf("Mode: professional\n");
Packit 229ac0
		printf("Data: ");
Packit 229ac0
		if (!(iec->status[0] & IEC958_AES0_NONAUDIO)) {
Packit 229ac0
			printf("audio\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("non-audio\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Rate: ");
Packit 229ac0
		switch (iec->status[0] & IEC958_AES0_PRO_FS) {
Packit 229ac0
		case IEC958_AES0_PRO_FS_44100:
Packit 229ac0
			printf("44100 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES0_PRO_FS_48000:
Packit 229ac0
			printf("48000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES0_PRO_FS_32000:
Packit 229ac0
			printf("32000 Hz\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
		printf("Rate Locked: ");
Packit 229ac0
		if (iec->status[0] & IEC958_AES0_PRO_FREQ_UNLOCKED)
Packit 229ac0
			printf("no\n");
Packit 229ac0
		else
Packit 229ac0
			printf("yes\n");
Packit 229ac0
		printf("Emphasis: ");
Packit 229ac0
		switch (iec->status[0] & IEC958_AES0_PRO_EMPHASIS) {
Packit 229ac0
		case IEC958_AES0_PRO_EMPHASIS_CCITT:
Packit 229ac0
			printf("CCITT J.17\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES0_PRO_EMPHASIS_NONE:
Packit 229ac0
			printf("none\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES0_PRO_EMPHASIS_5015:
Packit 229ac0
			printf("50/15us\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES0_PRO_EMPHASIS_NOTID:
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
		printf("Stereophonic: ");
Packit 229ac0
		if ((iec->status[1] & IEC958_AES1_PRO_MODE) == IEC958_AES1_PRO_MODE_STEREOPHONIC) {
Packit 229ac0
			printf("stereo\n");
Packit 229ac0
		} else {
Packit 229ac0
			printf("not indicated\n");
Packit 229ac0
		}
Packit 229ac0
		printf("Userbits: ");
Packit 229ac0
		switch (iec->status[1] & IEC958_AES1_PRO_USERBITS) {
Packit 229ac0
		case IEC958_AES1_PRO_USERBITS_192:
Packit 229ac0
			printf("192bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES1_PRO_USERBITS_UDEF:
Packit 229ac0
			printf("user-defined\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
		printf("Sample Bits: ");
Packit 229ac0
		switch (iec->status[2] & IEC958_AES2_PRO_SBITS) {
Packit 229ac0
		case IEC958_AES2_PRO_SBITS_20:
Packit 229ac0
			printf("20 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES2_PRO_SBITS_24:
Packit 229ac0
			printf("24 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES2_PRO_SBITS_UDEF:
Packit 229ac0
			printf("user defined\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
		printf("Word Length: ");
Packit 229ac0
		switch (iec->status[2] & IEC958_AES2_PRO_WORDLEN) {
Packit 229ac0
		case IEC958_AES2_PRO_WORDLEN_22_18:
Packit 229ac0
			printf("22 bit or 18 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES2_PRO_WORDLEN_23_19:
Packit 229ac0
			printf("23 bit or 19 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES2_PRO_WORDLEN_24_20:
Packit 229ac0
			printf("24 bit or 20 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		case IEC958_AES2_PRO_WORDLEN_20_16:
Packit 229ac0
			printf("20 bit or 16 bit\n");
Packit 229ac0
			break;
Packit 229ac0
		default:
Packit 229ac0
			printf("unknown\n");
Packit 229ac0
			break;
Packit 229ac0
		}
Packit 229ac0
	}
Packit 229ac0
}
Packit 229ac0