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"); }
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; }