コード例 #1
0
ファイル: multi.c プロジェクト: mmanley/Antares
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;
}
コード例 #2
0
uint8
read_gpio(ice1712 *ice)
{//return -1 if error else return an uint8
	return read_cci_uint8(ice, CCI_GPIO_DATA);
}