Ejemplo n.º 1
0
static void decodeAndPrintStatus() {
	uint8_t dummy8;
	
	// get all interesting status info
	printf("Format %s PCM\n", (spdif_read(SPDIF_FDSTAT) & _BV(SPDIF_PCM)) ? "is" : "is not");
	
	dummy8 = spdif_read(SPDIF_RERROR);
	if (dummy8 & _BV(SPDIF_PAR)) printf("Parity ");
	if (dummy8 & _BV(SPDIF_BIP)) printf("Bi-phase ");
	if (dummy8 & _BV(SPDIF_V))   printf("Validity ");
	if (dummy8 & _BV(SPDIF_UNLOCK)) printf("PLL ");
	if (dummy8 & _BV(SPDIF_CCRC)) printf("Channel Status CRC ");
	printf("\n");
	
	dummy8 = spdif_read(SPDIF_RCSTAT);
	printf("Aux data %d bits long\n", (uint8_t)(dummy8 >> 4));
	printf("Data is in %s format\n", (dummy8 & _BV(SPDIF_PRO)) ? "pro" : "consumer");
	printf("Copyright %s asserted, %s\n", (dummy8 & _BV(SPDIF_COPY)) ? "not" : "is", 
												    (dummy8 & _BV(SPDIF_ORIG)) ? "original" : "generation");
	printf("50us/15uS pre-emphasis %s indicated\n", (dummy8 & _BV(SPDIF_EMPH)) ? "not" : "is");
}
Ejemplo n.º 2
0
status_t 
ice1712_buffer_exchange(ice1712 *card, multi_buffer_info *data)
{
	int cpu_status = 0, status;
/*	unsigned char peak[MAX_ADC];
	int i;
*/
//	TRACE("Avant Exchange p : %d, r : %d\n", data->playback_buffer_cycle, data->record_buffer_cycle);

	status = acquire_sem_etc(card->buffer_ready_sem, 1, B_RELATIVE_TIMEOUT | B_CAN_INTERRUPT, 50000);
	switch (status) {
		case B_NO_ERROR:
//			TRACE("B_NO_ERROR\n");
			cpu_status  = disable_interrupts();

			// Playback buffers info
			data->played_real_time		= card->played_time;
			data->played_frames_count	= card->frames_count;
			data->playback_buffer_cycle	= (card->buffer - 1) % SWAPPING_BUFFERS; //Buffer played

			// Record buffers info
			data->recorded_real_time	= card->played_time;
			data->recorded_frames_count	= card->frames_count;
			data->record_buffer_cycle	= (card->buffer - 1) % SWAPPING_BUFFERS; //Buffer filled

			data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD;

			restore_interrupts(cpu_status);
			break;

		case B_BAD_SEM_ID:
			TRACE("B_BAD_SEM_ID\n");
			break;

		case B_INTERRUPTED:
			TRACE("B_INTERRUPTED\n");
			break;

		case B_BAD_VALUE:
			TRACE("B_BAD_VALUE\n");
			break;

		case B_WOULD_BLOCK:
			TRACE("B_WOULD_BLOCK\n");
			break;

		case B_TIMED_OUT:
			TRACE("B_TIMED_OUT\n");
			start_DMA(card);

			cpu_status = lock();

			data->played_real_time = card->played_time;
			data->playback_buffer_cycle	= 0;
			data->played_frames_count += card->buffer_size;

			data->recorded_real_time = card->played_time;
			data->record_buffer_cycle = 0;
			data->recorded_frames_count	+= card->buffer_size;
			data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD;

			unlock(cpu_status);
			break;

		default:
			TRACE("Default\n");
			break;
	}

	if ((card->buffer % 1500) == 0) {
		uint8 reg8, reg8_dir;
		reg8 = read_gpio(card);
		reg8_dir = read_cci_uint8(card, CCI_GPIO_DIRECTION_CONTROL);
		TRACE("DEBUG === GPIO = %d (dir %d)\n", reg8, reg8_dir);
		
		reg8 = spdif_read(card, CS84xx_VERSION_AND_CHIP_ID);
		TRACE("DEBUG === S/PDif Version : 0x%x\n", reg8);
	}

	return B_OK;
}